[CORS 02] CORS 설정 | CorsConfig

 

✔️ 이 글을 읽기 전 CORS에 대해 잘 모르겠다면 아래 글을 먼저 보자.

 

[CORS 00] CORS, 왜 필요할까?

[CORS 01] CORS 기본 동작 과정

 

 

CorsConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {

@Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 1
        config.addAllowedOriginPattern("*"); // 2
        config.addAllowedHeader("*"); // 3
        config.addAllowedMethod("*"); // 4
        source.registerCorsConfiguration("/api/v1/**", config); // 5

        return new CorsFilter(source);
    }
}

 

1  .setAllowCredentials(true);

  • 요청에 대한 응답을 표시할 수 있는지 나타냄.
  • 자격 증명으로 실제 요청을 수행할 수 있는지 나타냄.
  • Authorization로 사용자 인증 시 true로 한다.
  • allowedOriginPattern이 일치하면 응답 헤더에 있는 Access-Control-Allow-Origin은 matched origin으로 설정됨.
    • " * " 나 패턴에는 설정되지 않으므로 true로 설정해서 함께 사용해야 함.

 

2  .addAllowedOriginPattern("*");

  • 모든 origin에 응답을 허용한다는 의미
  • 특정 origin만 허용하고 싶다면 * 대신 허용할 origin을 적어준다.
  • addAllowedOrigin("*") 대신 사용
  • 스프링부트 2.4.0부터 allowCredentials가 true일 때 allowedOrigins에 특수 값인 " * " 추가할 수 없게 되었음.
  • 따라서 allowedOriginPattern 사용

 

3  .addAllowedHeader("*");

  • 모든 header에 응답 허용한다는 의미

 

4  .addAllowedMethod("*");

  • 모든 HTTP method의 요청을 허용한다는 의미
  • 매개변수로 허용하고 싶은 HTTP method를 적어준다.( post, get, put, delete, patch )

 

5  .registerCorsConfiguration("/api/v1/**", config);

  • " /api/v1/** " 로 오는 모든 접근은 1~4에 설정한 것을 적용한다는 의미
  • 매개변수로 적은 경로(패턴)로 오는 모든 접근은 1~4에 설정한 해당 config 설정을 따라감.

 

📢 URL 패턴  /* /**  차이

/*   :   경로의 바로 하위에 있는 경로 매핑
예)   AA/*     →     🔘 : AA/BB,    AA/CC  ❌ : AA/BB/CC 

/**   :   경로의 모든 하위 경로 매핑
예)   AA/**    →     🔘 : AA/BB,    AA/CC,    AA/BB/CC,    AA/BB/CC/.../.../... 전부 해당

 

 

 


 

  • 출처
 

교차 출처 리소스 공유 (CORS) - HTTP | MDN

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라

developer.mozilla.org

 

CorsConfiguration (Spring Framework 6.0.11 API)

Alternative to setAllowedOrigins(java.util.List ) that supports more flexible origins patterns with "*" anywhere in the host name in addition to port lists. Examples: https://*.domain1.com -- domains ending with domain1.com https://*.domain1.com:[8080,8081

docs.spring.io

 

UrlBasedCorsConfigurationSource (Spring Framework 6.0.11 API)

When enabled, if there is neither a esolved String lookupPath nor a parsed RequestPath then use the configured UrlPathHelper to resolve a String lookupPath. This in turn determines use of URL pattern matching with PathMatcher or with parsed PathPatterns. I

docs.spring.io

 

 

'Spring Boot' 카테고리의 다른 글

[CORS 01] CORS 기본 동작 과정  (0) 2023.07.26
[CORS 00] CORS, 왜 필요할까?  (0) 2023.07.26
[Spring Security 02] SecurityConfig.java  (0) 2023.02.28
Spring Security란 무엇인가  (0) 2023.01.30