✔️ 이 글을 읽기 전 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/.../.../... 전부 해당
- 출처
'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 |