CORS fillter
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of("http://localhost:3000"));
configuration.addAllowedMethod("*");
configuration.addAllowedHeader("*");
configuration.setAllowCredentials(true);
configuration.setExposedHeaders(List.of("Set-Cookie", "Authorization"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
https://docs.spring.io/spring-security/site/docs/5.3.4.RELEASE/reference/html5/#cors
Spring Security Reference
In Spring Security 3.0, the codebase was sub-divided into separate jars which more clearly separate different functionality areas and third-party dependencies. If you use Maven to build your project, these are the modules you should add to your pom.xml. Ev
docs.spring.io
Spring Security와 함께 사용하려는 경우 CorsFilter를 활용하여 Spring Security가 CORS를 기본적으로 지원한다는 점을 명심해야 한다.
CORS는 Spring Security보다 먼저 처리되어야 한다. 사전 요청에는 쿠키가 포함되지 않기 때문이다. 즉, 요청에 쿠키가 없고 Spring Security가 먼저인 경우, 요청은 사용자가 인증되지 않았다고 판단(요청에 쿠키가 없기 때문) 거부한다. CORS가 먼저 처리되도록하기 위햐여 CorsFile를 사용한다. 사용자는 다음을 사용하여 Spring Security와 CorsFilter를 통합할 수 있다.
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// by default uses a Bean by the name of corsConfigurationSource
.cors(withDefaults())
...
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
WebMvcConfigurer.addCorsMappings
@Configuration
public class CorsMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry corsRegistry) {
corsRegistry.addMapping("/**")
.exposedHeaders("Set-Cookie")
.allowedOrigins("http://localhost:3000");
}
}
Web on Servlet Stack
This part of the reference documentation covers support for Servlet stack, WebSocket messaging that includes raw WebSocket interactions, WebSocket emulation through SockJS, and publish-subscribe messaging through STOMP as a sub-protocol over WebSocket. 4.1
docs.spring.io
Spring MVC HandlerMapping 구현은 CORS에 대한 기본 제공 지원을 제공한다. 요청을 핸들러에 성공적으로 매핑한 후 HandlerMapping 구현은 주어진 요청 및 핸들러에 대한 CORS 구성을 확인하고 추가 조치를 취한다. 사전 요청을 직접 처리되는 반면, 단순 및 실제 CORS 요청은 가로채고 검증되며 필요한 CORS 응답 헤더가 설정된다.
교차 출처 요청(즉, 헤더가 존재하고 요청 호스트와 다름)을 활성화하려면 Origin이 명시적으로 선언된 CORS 구성이 필요하다. 일치하는 CORS 구성이 없으면 사전 요청이 거부된다. 단순 및 실제 CORS 요청의 응답에는 CORS 헤더가 추가되지 않으므로 브라우저에서 거부한다.
WebMvcConfigurer은 Spring Web MVC 라이브러리의 일부이다. CORS를 구성하면 addCorsMapping을 통하여 Spring Web MVC에서 처리하는 모든 URL에 CORS가 추가된다.
<참고>
https://stackoverflow.com/questions/63426010/cors-filter-vs-webmvcconfigurer-addcorsmappings
'F::d' 카테고리의 다른 글
스프링 record 성능 향상은? (1) | 2025.01.09 |
---|---|
@Bean, @Configuration 그리고 @Component (0) | 2025.01.02 |
[Spring boot] 환경별 YAML 생성하기(profile) (0) | 2024.12.11 |