Swagger는 REST API의 문서화, 테스트를 용이하게 해주는 프레임워크이다.
Spring에 Swagger를 적용하는 과정은 이전 글에서 다루었다.
2022.07.16 - [java/spring] - [Spring] Swagger 3.0 적용
이번에는 Spring Security가 적용되어 있는 프로젝트에서 Swagger를 어떻게 적용시킬 수 있는지 알아보자.
SwaggerConfig
이전에 만들었던 SwaggerConfig 파일에서 다음 코드를 추가하자.
@Configuration
public class SwaggerConfig {
@Bean
public Docket api(TypeResolver typeResolver) {
return new Docket(DocumentationType.OAS_30)
.securityContexts(Arrays.asList(securityContext())) // 추가
.securitySchemes(Arrays.asList(apiKey())) // 추가
.additionalModels(typeResolver.resolve(MemberResponseDto.class))
.additionalModels(typeResolver.resolve(ErrorResponse.class))
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage(SwaggerInfo.basePackage))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
// 추가
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.build();
}
// 추가
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
}
// 추가
private ApiKey apiKey() {
return new ApiKey("Authorization", "Authorization", "header");
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Backend API")
.description("Backend API 문서")
.version("1.0")
.build();
}
}
추가한 부분 중 securityContext()는 인증 방식을, apiKey()는 Swagger 내에서 인증하는 방식을 나타낸 것이다. 여기서는 Authorization 헤더를 지정했다.
SecurityConfig
Spring Securiy 설정에 다음 코드를 추가한다.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
...
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
...
.antMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-resources/**").permitAll()
...
return http.build();
}
...
}
이제 서버를 켜고 swagger ui를 접속한다.
우측에 Authorize 버튼이 생긴 것을 볼 수 있다. 클릭해보자.
인증키를 입력할 수 있는 창이 나오는데, 여기에 본인 프로젝트에 맞게 인증키를 입력하면 된다. 나는 JWT 토큰을 사용하기 때문에, "Bearer {access token}" 을 입력해주었다.
알맞게 입력했다면 API에 접근해서 테스트 해볼 수 있다.
참고자료
https://lemontia.tistory.com/1027
'java > spring' 카테고리의 다른 글
[Spring] S3 Pre-Signed URL 생성 (0) | 2022.07.25 |
---|---|
[Spring] @Value, static 변수에 사용하기 (0) | 2022.07.22 |
[Spring] Swagger 3.0 적용 (0) | 2022.07.16 |
[Spring] Spring Security + JWT 토큰을 통한 로그인 (57) | 2022.07.16 |
[Spring] Controller에서 pathvariable로 path(/aaa/bbb) 값 받는 법 (0) | 2022.07.15 |