본문 바로가기

Spring

SpringBoot CORS설정

728x90
반응형

CORS란?

Cross-Origin Resource Sharing(CORS)

교차출처 리소스 공유 서로 다른 도메인끼리 다른 도메인의 요청을 허용하도록 하는 구조를 말한다.

허용하기 위해서도 사용하지만 다른 도메인에서 쓰지 못하도록 제한하는 데도 사용한다.

 

요청헤더

  • Origin
  • Access-Control-Request-Method
  • Access-Control-Request-Headers

응답헤더

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Access-Control-Allow-Methods
  • Access-Control-Allow-Headers

 

SpringBoot에서 CORS설정하는 방법

SpringBoot에서 @EnableWebMvc 를 사용하면 스프링MVC에 기본적인 설정이 자동으로 된다.

(@EnableWebMvc -> DelegatingWebMvcConfiguration -> WebMvcConfigurationSupport)

  > 내부 로직에 들어가보면 Spring config의 기본적인 것들을 자동 설정해준다.
DelegatingWebMvcConfiguration을 통해 스프링 설정을 재정의해서 쓸 수 있는데 이때 WebMvcConfigurer를 상속받아서 

오버라이딩하면 된다.

 

CORS도 기본 구성이 있기 때문에 오버라이딩해서 재정의하면 된다.

 

docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html

 

WebMvcConfigurer (Spring Framework 5.3.2 API)

 

docs.spring.io

오버라이딩해서 사용할 수 있는 메소드를 확인할 수 있다.

 

 

기본 설정은 다음과 같다.

 

docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#applyPermitDefaultValues--

 

CorsConfiguration (Spring Framework 5.3.2 API)

A container for CORS configuration along with methods to check against the actual origin, HTTP methods, and headers of a given request. By default a newly created CorsConfiguration does not permit any cross-origin requests and must be configured explicitly

docs.spring.io

 

  • Allow all origins with the special value "*" defined in the CORS spec. This is set only if neither origins nor originPatterns are already set.
  • Allow "simple" methods GET, HEAD and POST.
  • Allow all headers.
  • Set max age to 1800 seconds (30 minutes).

오버라이딩하는 방법

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("*");
    }
}



@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("HEAD", "POST", "GET", "OPTIONS", "DELETE");
    }
}

 

728x90
반응형