Swagger v2
이 글을 보는 사람은 Swagger가 뭔지는 아는데 어떻게 Jwt를 사용하는 환경에 어떻게 적용하는 것인지 궁금해서 들어오는 것이라고 생각한다.
그래서 거두절미하고 코드스니펫부터 제공하겠다.
코드를 보기 이전에 가장 먼저 확인해야 할 부분!
Swagger v2는 SpringBoot 최신버전에서 제대로 작동 안 할 수도 있기 때문에,
build.gradle에서 springboot 버전을 2.5.3 으로 맞춰줘야 한다.
plugins {
id 'org.springframework.boot' version '2.5.3'
}
이제 진짜 코드다.
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
// 스웨거가 RestController를 전부 스캔을 한다.
// basePackage => 어디를 범위로 스캔을 할 것인지 작성
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo())
// 여기부터 jwt를 위한 설정
.forCodeGeneration(true)
.ignoredParameterTypes(java.sql.Date.class)
.genericModelSubstitutes(ResponseEntity.class)
.securityContexts(Lists.newArrayList(securityContext()))
.securitySchemes(Lists.newArrayList(authorizationKey()))
.useDefaultResponseMessages(false);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("제목이에요")
.description("설명이에요")
.version("0.0.1")
.termsOfServiceUrl("https://dazbee.tistory.com")
.license("LICENSE")
.licenseUrl("")
.build();
}
/**
* authorizationKey
*
* @return
*/
private ApiKey authorizationKey() {
return new ApiKey("JWT_TOKEN", "Authorization", "header");
}
/**
* securityContext
*
* @return
*/
private springfox.documentation.spi.service.contexts.SecurityContext securityContext() {
return springfox.documentation.spi.service.contexts.SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.any())
.build();
}
/**
* defaultAuth
*
* @return
*/
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Lists.newArrayList(new SecurityReference("JWT_TOKEN", authorizationScopes),
new SecurityReference("HTTP_REQUEST", authorizationScopes));
}
// 완료가 되었으면 오른쪽 URL 로 접속 => http://localhost:8080/swagger-ui.html
// Swagger 3.0.0 이상 버전을 사용할 경우/swagger-ui 로 접속
}
커스텀은 심플하다.
private ApiKey authorizationKey() {
return new ApiKey("JWT_TOKEN", "Authorization", "header");
}
AuthorizationKey의 중앙(keyname)에 JWT 토큰을 교환할 때 쓰이는 헤더 이름을 적어주면 된다.
끝!
'내가 배운 것들 > 문제 해결' 카테고리의 다른 글
[SpringBoot] DTO 형식으로 반환해줄 때, NULL값은 숨긴 채로 되돌려주기 (0) | 2021.12.23 |
---|---|
[RegExp] 아이디, 닉네임, 비밀번호 정규식 (1) | 2021.12.23 |
[QueryDSL/MySQL] QueryDSL로 MySQL에서 랜덤한 레코드 가져오기 (0) | 2021.12.22 |
[QueryDSL] Handler dispatch failed; nested exception is java.lang.NoSuchFieldError: TREATED_PATH (0) | 2021.12.22 |
[SpringBoot] JPA를 이용해 랜덤한 하나의 레코드만 가져오려면 어떻게 해야할까? (0) | 2021.12.09 |
댓글