ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Swagger 2.9.2 Jwt 설정 통일하는 법
    Spring 2022. 3. 31. 17:46

    그동안 jwt 설정을 apiImplicitParam을 이용해 하나하나 다 설정해주며 쓰고 있었다.

     

    하지만 매함수에 항상 같은 매개변수설정이 있는것에 대한 불만이 있었고 검색을 해본 결과 2.9.2버전부터 이 문제를 개선할 수 있는 방법이 있다는 것을 알았다.

     

    swaggerConfig을 다음과 같이 설정해준다.

     

    @Profile({"local"})
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        private String version;
        private String title;
        private String description;
    
        @Bean
        public Docket swaggerTest() {
    
            version = "1.0.0";
            title = "SpinOff API";
            description = "테스트용";
    
            return new Docket(DocumentationType.SWAGGER_2)
                    .useDefaultResponseMessages(false)
                    .ignoredParameterTypes(MemberDetails.class)
                    .ignoredParameterTypes(Pageable.class)
                    .select()
                    .apis(RequestHandlerSelectors.any())
                    .paths(PathSelectors.ant("/api/**"))
                    .build()
                    .apiInfo(apiInfo(title, version, description))
                    .securityContexts(List.of(securityContext()))
                    .securitySchemes(List.of(apiKey()));
    
        }
        private ApiInfo apiInfo(String title, String version, String description) {
            return new ApiInfoBuilder()
                    .title(title)
                    .version(version)
                    .description(description)
                    .build();
        }
        private ApiKey apiKey() {
            return new ApiKey("JWT", "jwt토큰 헤더값", "header");
        }
    
        private SecurityContext securityContext() {
            return springfox
                    .documentation
                    .spi.service
                    .contexts
                    .SecurityContext
                    .builder()
                    .securityReferences(defaultAuth()).forPaths(PathSelectors.any()).build();
        }
        List<SecurityReference> defaultAuth() {
            AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
            AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
            authorizationScopes[0] = authorizationScope;
            return List.of(new SecurityReference("JWT", authorizationScopes));
        }
    }

    그 중에 이번 jwt와 관련된 부분들은

     

    swaggerTest()의 securityContexts(List.of(securityContext())), securitySchemes(List.of(apiKey()))

     

    apiKey(), securityContext(), defaultAuth() 함수들이다.

     

    apiKey()의 "jwt 토큰 헤더값" 부분은 각자 jwt토큰을 담는 헤더값을 넣어주면 된다.

     

    그리고 나서

     

    이런식으로 @AuthenticationPrincipal 나 커스텀 어노테이션으로 로그인멤버를 불러오는 항목에 대해 .ignoredParameterTypes(MemberDetails.class)를 붙여넣어주면 스웨거의 ui가 훨씬 깔끔해지고 편해진다.

     

    토큰값을 넣어주면 된다.

     

    댓글

Designed by Tistory.