본문 바로가기

BACKEND/Spring

SpringBoot Swagger2 UI에 JWT 토큰 Authorize 버튼 넣기

728x90
반응형

** 기본적으로 security 설정과 swagger 설정이 다 되어있음을 바탕으로 한다. 

 

SwaggerConfig.java

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.cherishpet.backend"))
                .paths(PathSelectors.ant("/api/**"))
                .build()
                .apiInfo(metaData())
                .securityContexts(Arrays.asList(securityContext()))
                .securitySchemes(Arrays.asList(apiKey()));

    }

    private ApiInfo metaData() {
        return new ApiInfoBuilder()
                .title("CherishPet REST API")
                .description("CherishPet rest api documentation")
                .license("Apache License Version 2.0")
                .build();
    }

    private ApiKey apiKey() {
        return new ApiKey("JWT", "Authorization", "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 Arrays.asList(new SecurityReference("JWT", authorizationScopes));
    }
}

여기서 apiKey()함수에서 리턴하는  new ApiKey("JWT", "Authorization", "header") 의 "Authorization"은 헤더에서 JWT 토큰 값을 가져올때 지정해 놓은 key 이름과 같아야한다.

 

******

security 설정에서 HttpServletRequest 객체에서 헤더(토큰)를 가져올 때

어떤 이름으로 getHeader("정해놓은 키이름")를 하는지 확인하자!!!

******

728x90
반응형

'BACKEND > Spring' 카테고리의 다른 글

[Spring] detached entity passed to persist 에러  (0) 2022.05.26
세션과 JWT의 차이  (0) 2022.05.23
JPA, MYSQL DateTime 변경  (0) 2022.02.20
스프링, mysql 연동 gradle, applicaion.yml 설정하기  (0) 2022.02.08
JWT Tutorial  (0) 2022.02.01