728x90
반응형
현재 상황은 다음과 같다.
1. 서버를 배포함
2. 무료 도메인 duckdns를 사용하여 도메인 서버에 내 주소를 등록
3. Nginx를 사용해서 SSL 통신 적용, https 통신
4. Security에 Cors설정을 해둔 상황
Postman이나 클라이언트단에서 요청을 보내면 정상적으로 데이터를 수신할 수 있었으나 내가 Swagger에서 직접 요청을 보내면 위와 같은 에러가 뜨는 상황이었다.
원인은 Swagger에 설정하지 않은 내 도메인주소로 인해 일치하지 않은 Origin 정책이 발생한다는 것이었다.
현재는 상대 경로 설정을 통해 해결할 수 있었지만 그 이전에는 http://[도메인주소]로 지정이 되어 있었고, 내 실제 도메인은 https://[도메인주소]였기에 정상적인 통신이 불가능했다. 이를 해결하기 위한 방법으로는 몇 가지가 있으나 난 이 방법을 통해 해결했다.
전체 코드
package com.mentit.mento.global.swagger;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI() {
License license = new License();
license.setName("dotorit");
Info info = new Info()
.title("\"dotorit API Document\"")
.description("mentoApp API 문서 입니다.")
.version("v0.0.1")
.license(license);
String jwt = "JWT";
SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwt); // 헤더에 토큰 포함
Components components = new Components().addSecuritySchemes(jwt, new SecurityScheme()
.name(jwt)
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT"));
return new OpenAPI()
.info(info)
.addSecurityItem(securityRequirement)
.addServersItem(new Server().url("/"))
.components(components)
.addSecurityItem(new SecurityRequirement().addList(jwt));
}
}
핵심 코드
.addServersItem으로 상대 경로 "/"를 설정해주면 현재 서버 주소를 기반으로 요청을 보내기에 도메인과 프로토콜 포트등이 일치하기 때문에 CORS에러가 발생하지 않는다.
return new OpenAPI()
.info(info)
.addSecurityItem(securityRequirement)
.addServersItem(new Server().url("/"))
.components(components)
.addSecurityItem(new SecurityRequirement().addList(jwt));
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring / IoC, DI] Ioc Container와 Bean (0) | 2025.01.15 |
---|---|
[Elastic Search] Elastic Search 개념 (1) | 2024.12.24 |
테스트 코드의 기본 이론 (1) | 2024.11.16 |
[Spring/ 환경변수 설정] 로컬에서 IntelliJ 환경변수 설정하기 (0) | 2024.08.12 |
[Spring- LogBack] LogBack과 Log4j2 중 어떤걸 사용할까? (0) | 2024.08.03 |