스프링시큐리 정상 없을때 정상 동작하던 @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; } }