-
[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가 훨씬 깔끔해지고 편해진다.
토큰값을 넣어주면 된다.
'Spring' 카테고리의 다른 글
[Spring boot] spring boot batch 관계도 (0) 2022.05.10 [Spring boot] spring boot batch 기본 구조 (0) 2022.05.04 [Spring] Swagger 2.9.2 NumberFormatException 해결법 (0) 2022.03.31 [Spring] Spring Security 로그인된 유저 뽑아오기 (1) 2022.03.14 [Spring] 로깅 알아보기 (0) 2022.03.05