Swagger - hou27/spring-boot-jwt-example GitHub Wiki

Apply SecurityOpenApi to specific groups through OpenApiCustomizer

@Configuration
public class SwaggerConfig {
  @Bean
  public GroupedOpenApi securityApi() {
    return GroupedOpenApi.builder()
        .group("authentication is required")
        .pathsToMatch("/user/profile")
        .addOpenApiCustomiser(buildSecurityOpenApi())
        .build();
  }

  @Bean
  public GroupedOpenApi nonSecurityApi() {
    return GroupedOpenApi.builder()
        .group("authentication isn't required")
        .pathsToExclude("/user/profile")
        .build();
  }

  public OpenApiCustomiser buildSecurityOpenApi() {
    // jwt token 설정 시 header에 값을 넣어줌
    return OpenApi -> OpenApi.addSecurityItem(new SecurityRequirement().addList("jwt access token"))
        .getComponents().addSecuritySchemes("jwt access token", new SecurityScheme()
            .name("Authorization")
            .type(SecurityScheme.Type.HTTP)
            .in(SecurityScheme.In.HEADER)
            .bearerFormat("JWT")
            .scheme("bearer"));
  }
  @Bean
  public OpenAPI customOpenAPI() {

    return new OpenAPI()
        .components(new Components())
        .info(new Info().title("Spring Boot API Example")
            .description("Spring Boot API 예시 프로젝트입니다.")
            .version("v0.0.1"));
  }
}

OpenApiCustomizer를 사용하여
인증 정보가 필요한(JWT Token이 필요한) API를 모아둔 GroupedOpenApi에만
Authorization 정보를 설정할 수 있는 SecurityOpenApi를 적용해주었다.

보안 속성
참고