참고 자료
사용중인 라이브러리
// swaggerDoc implementation 'org.springdoc:springdoc-openapi-ui:1.6.15'
spring으로 jwt 토큰을 이용해 인가를 하던 상황에
헤더에 swagger에서 token을 넘겨주지 못하여 swagger로 테스트 하기에 불편한 상황이 있었다.
우리는 헤더에 accessToken
, refreshToken
를 받아야한다.
curl -X 'POST' \
'http://localhost:8080/users/test' \
-H 'accept: */*' \
-H 'accessToken: ...' \
-H 'refreshToken: ...' \
-d ''
이런 형식이다.
Swagger에서는 헤더에 넣는 입력을 따로 명시해 주지 않는다.
헤더에 accessToken, refreshToken이 필요한데도 넣을수 없음…
SecuritySchemes
만들어주기@Configuration
가 붙은 SwaggerConfig
에서
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(
new Components()
// accessToken이라는 스키마 만들어주기
.addSecuritySchemes("accessToken", new SecurityScheme()
.name("accessToken")
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.bearerFormat("JWT")
)
// refreshToken이라는 스키마 만들어주기
.addSecuritySchemes("refreshToken", new SecurityScheme()
.name("refreshToken")
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.bearerFormat("JWT")
)
);
}
}
위와같이 입력해보자
그 다음 Swagger UI를 들어가보면
저기 오른쪽 아래에
초록 버튼이 보인다. 들어가보면
위처럼 header
로 apiKey
를 입력받는 창이 나온다.
위처럼 적당히 입력해준다.
눈치 챌수도 있지만 /users/test
api
를 보면 오른쪽에 자물쇠가 걸려 있다.
자물쇠가 걸려있는 이유는 /users/test
에 SecurityRequirement
를 걸어놨기 때문이다.
@Operation(summary = "테스트 유저 생성", description =
"# Test User를 생성합니다. 다른 기능을 테스트 할때 이용 하세요"
**, security = {@SecurityRequirement(name = "accessToken"), @SecurityRequirement(name = "refreshToken")}**
)
@PostMapping("/test")
public ApiResponse<UserResponseDTO.JoinResultDTO> createTestUser() {
return ApiResponse.onSuccess(
SuccessStatus.User_OK.getCode(),
SuccessStatus.User_OK.getMessage(),
UserConverter.createTestUser(userService.createTestUser())
);
}
위 코드처럼 SecurityRequirement 입력한뒤 헤더로 넣고싶은 스키마들을 입력해준다.
만약 accessToken, refreshToken이 필요한 자동로그인에서는 위처럼 해주면 된다.
하나만 필요하다면 아래 처럼
@Operation(summary = "테스트 유저 생성", description = "# Test User를 생성합니다. 다른 기능을 테스트 할때 이용 하세요" **, security = @SecurityRequirement(name = "accessToken") )**
호출을 해보면
헤더가 들어간 상태로 api가 호출되는 것을 볼 수 있다.
🙏