Spring
[Spring] Swagger 2.9.2 Jwt 설정 통일하는 법
퉁그리
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가 훨씬 깔끔해지고 편해진다.
토큰값을 넣어주면 된다.