티스토리 뷰
토이 프로젝트로 배우는 자바 스프링 [8]. Swagger Header Custom하기
kkoon9 2025. 2. 16. 20:55자바와 스프링에 대한 기본 지식을 기르기 위해 토이 프로젝트를 시작했습니다.
토이 프로젝트로 배우는 자바 스프링 [0]. prologue
자바와 스프링에 대한 기본 지식을 기르기 위해 토이 프로젝트를 시작했습니다. 프론트 코드 : https://github.com/laboratory-kkoon9/connector_front GitHub - laboratory-kkoon9/connector_front Contribute to laboratory-kkoon9/co
kkoon9.tistory.com
프론트 코드 : https://github.com/laboratory-kkoon9/connector_front
백엔드 코드 : https://github.com/laboratory-kkoon9/connector_back
배경
Swagger를 설정하다가 생긴 문제입니다.
package com.connector.global.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile({"local", "develop"})
@Configuration
@OpenAPIDefinition(servers = {@io.swagger.v3.oas.annotations.servers.Server(url = "/", description = "API Server")})
public class SwaggerConfig {
@Bean
public GroupedOpenApi customTestOpenAPi() {
return GroupedOpenApi
.builder()
.group("APIS")
.addOpenApiCustomiser(buildSecurityOpenApi())
.build();
}
public OpenApiCustomiser buildSecurityOpenApi() {
return OpenApi -> OpenApi.addSecurityItem(new SecurityRequirement().addList("jwt token"))
.getComponents()
.addSecuritySchemes("jwt token", new SecurityScheme()
.name("Authorization")
.type(SecurityScheme.Type.HTTP)
.in(SecurityScheme.In.HEADER)
.bearerFormat("JWT")
.scheme("bearer"));
}
}
해당 프로젝트는 token 유무를 통해 유저의 권한을 확인하고 있습니다.
클라이언트에서는 api를 호출할 때 Header에 토큰정보를 넣어서 보내주고 있습니다.
토큰 이름을 Authorization으로 변경해주려면 다음과 같이 변경해주어야 합니다.
SecurityScheme 변경
package com.connector.global.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile({"local", "develop"})
@Configuration
@OpenAPIDefinition(servers = {@io.swagger.v3.oas.annotations.servers.Server(url = "/", description = "API Server")})
public class SwaggerConfig {
@Bean
public GroupedOpenApi customTestOpenAPi() {
return GroupedOpenApi
.builder()
.group("APIS")
.addOpenApiCustomiser(buildSecurityOpenApi())
.build();
}
public OpenApiCustomiser buildSecurityOpenApi() {
return OpenApi -> OpenApi.addSecurityItem(new SecurityRequirement().addList("jwt token"))
.getComponents()
.addSecuritySchemes("jwt token", new SecurityScheme()
.name("x-auth-token")
.type(SecurityScheme.Type.HTTP)
.in(SecurityScheme.In.HEADER)
.bearerFormat("JWT")
.scheme("bearer"));
}
}
다음과 같이 변경하게 되면 잘 동작할까요?
아쉽지만 동일하게 Authorization으로 보내주고 있습니다.
그럼 어떤 부분을 변경해야할까요?
SecurityScheme.Type HTTP -> APIKEY
SecurityScheme.Type HTTP
SecurityScheme.Type의 HTTP는 Basic 혹은 Bearer, 다른 HTTP authentications schema로 사용된다고 합니다.
swagger 문서에 따르면 Authorization으로 고정되는 걸로 보입니다.
SecurityScheme.Type APIKEY
해당 프로젝트에서는 API Key로써 사용되고 있기 때문에 Type을 APIKEY로 변경해주었습니다.
package com.connector.global.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.GroupedOpenApi;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile({"local", "develop"})
@Configuration
@OpenAPIDefinition(servers = {@io.swagger.v3.oas.annotations.servers.Server(url = "/", description = "API Server")})
public class SwaggerConfig {
@Bean
public GroupedOpenApi customTestOpenAPi() {
return GroupedOpenApi
.builder()
.group("APIS")
.addOpenApiCustomiser(buildSecurityOpenApi())
.build();
}
public OpenApiCustomiser buildSecurityOpenApi() {
return openApi -> openApi.addSecurityItem(new SecurityRequirement().addList("x-auth-token"))
.getComponents()
.addSecuritySchemes("x-auth-token", new SecurityScheme()
.name("x-auth-token")
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER));
}
}
다음 이미지는 스웨거 결과물 이미지입니다. 비록 Bearer는 사라졌지만, 헤더에 x-auth-token이 만들어진걸 알 수 있습니다.
'개발 노트 > 토이 프로젝트로 배우는 스프링+자바' 카테고리의 다른 글
토이 프로젝트로 배우는 자바 스프링 [7]. @Controller에서 객체 리턴했을 때 발생하는 호출 (FORWARD) (0) | 2024.11.18 |
---|---|
토이 프로젝트로 배우는 자바 스프링 [6]. Filter를 거치지 않게 하기 (shouldNotFilter) (0) | 2024.07.12 |
토이 프로젝트로 배우는 자바 스프링 [5]. 엔티티의 생성시각을 자동으로 저장하기 (JPA Auditing) (0) | 2024.04.23 |
토이 프로젝트로 배우는 자바 스프링 [4]. WebSecurityConfigurerAdapter deprecated (1) | 2024.01.28 |
토이 프로젝트로 배우는 자바 스프링 [3]. API path와 HTTP Method로 권한 분리하기 (0) | 2024.01.23 |
- Total
- Today
- Yesterday
- 백준
- Effective Java
- BAEKJOON
- AWS
- 프로그래머스
- Spring Boot
- Kotlin
- 정규표현식
- 클린 코드
- Spring
- Algorithm
- 테라폼
- programmers
- JPA
- kotest
- 클린 아키텍처
- 디자인패턴
- 이펙티브 자바
- C++
- 디자인 패턴
- kkoon9
- 객체지향
- Java
- 이팩티브 자바
- 코테
- 알고리즘
- BOJ
- MSA
- Olympiad
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |