[Spring / Swagger] Cors , Fail to Fetch 해결방법

2025. 1. 24. 12:04·Spring
728x90
반응형
SMALL

현재 상황은 다음과 같다.

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
반응형
SMALL

'Spring' 카테고리의 다른 글

[Github] Yml파일 서브모듈에서 불러와서 안전하게 사용하기  (0) 2025.02.17
[Restful API] Restful한 API 문서 작성법, REST API 성숙도 모델  (0) 2025.02.13
[Spring / IoC, DI] Ioc Container와 Bean  (0) 2025.01.15
[Elastic Search] Elastic Search 개념  (1) 2024.12.24
테스트 코드의 기본 이론  (1) 2024.11.16
'Spring' 카테고리의 다른 글
  • [Github] Yml파일 서브모듈에서 불러와서 안전하게 사용하기
  • [Restful API] Restful한 API 문서 작성법, REST API 성숙도 모델
  • [Spring / IoC, DI] Ioc Container와 Bean
  • [Elastic Search] Elastic Search 개념
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (329)
      • 면접 준비 (45)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (5)
      • Kafka (5)
      • Spring (60)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (39)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Spring
      자바 알고리즘
      redis
      리눅스
      자바
      jsp request
      자바 반복문
      레디스
      리눅스마스터2급
      자바 면접질문
      자바스크립트
      redis 채팅
      프로그래머스
      Spring Data Redis
      springsecurity
      java
      JavaScript
      JS
      백준
      jsp기초
      자바기초
      Til
      CSS
      HTML
      자바 면접
      JSP
      리눅스마스터2급정리
      Springframework
      spring redis
      스프링프레임워크
    • 최근 댓글

    • 최근 글

    • 250x250
    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [Spring / Swagger] Cors , Fail to Fetch 해결방법
    상단으로

    티스토리툴바