스프링시큐리 정상 없을때 정상 동작하던 @CrossOrigin(origins = "*") 가 스프링시큐리 추가 작업 중 cors 에러를 다시 보냄
Spring Security의 CSRF(Cross-Site Request Forgery) 필터는 기본적으로 모든 POST, PUT, DELETE, PATCH 요청에 대해서 CSRF 토큰 검증을 수행합니다. 이때, @CrossOrigin 설정은 CORS를 허용하는 용도로 사용됩니다.
따라서, @CrossOrigin('*') 설정을 사용하더라도, Spring Security의 CSRF 필터가 적용되는 경우 POST, PUT, DELETE, PATCH 요청이 CsrfFilter를 거치게 됩니다. 이때, 요청 헤더에는 CSRF 토큰이 함께 전송되어야 하며, CSRF 토큰이 올바르지 않은 경우 요청은 차단됩니다.
결론적으로, @CrossOrigin('*') 설정을 사용하는 경우에도, Spring Security의 CSRF 필터가 적용되는 경우 요청은 CSRF 토큰 검증을 거쳐야 하며, 이후에 @CrossOrigin 설정이 적용됩니다. 따라서, CSRF 필터를 사용하는 경우 @CrossOrigin('*') 설정만으로는 CORS 관련 문제를 모두 해결할 수 없습니다.
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf().disable() //작업중 일단 제거..
.headers()
.frameOptions().disable();
http.cors()
.configurationSource(corsConfigurationSource());
http.authorizeHttpRequests( (requests) -> requests
.requestMatchers("/css/**", "/js/**").permitAll() //정적자원 허용
.anyRequest().authenticated()
)
return http.build();
}
private CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration config = new CorsConfiguration();
// config.setAllowCredentials(true);
config.setAllowCredentials(false);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return source;
}
}