이번 글에서는 Spring security에서 글로벌하게 CORS설정을 해보도록 하겠다 🔥
해줘야할 것은 2가지가 있다.
기본적으로 아무것도 설정하지 않으면, 모든 외부 요청에 대해서 CORS Block
을 한다.
그래서 CORS에 대한 설정을 커스텀해야하는데, 그렇게 하려면 커스텀을 허용해주어야한다.
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.httpBasic().disable();
http.csrf().disable(); // 외부 POST 요청을 받아야하니 csrf는 꺼준다.
http.cors(); // ⭐ CORS를 커스텀하려면 이렇게
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.authorizeHttpRequests()
.requestMatchers("/**").permitAll()
.anyRequest().authenticated();
return http.build();
}
}
Spring security를 사용한다면 상세한 설정은 다르겠지만 SecurityFilterChain
빈을 위와 같이 만들 것이다.
여기에서 .cors()
메서드를 실행해주면, cors설정을 내가 원하는대로 설정할 수 있게 된다.
코멘트를 읽어보니, CorsFilter
, CorsConfiguration
등등을 활용하여 상세한 CORS설정을 해줄 수 있다고 한다.
이제 원하는대로 CORS설정을 해보도록 하자.
나는 CORS관련 설정파일을 따로 만들었다.
바로 요로케
@Configuration
public class CorsConfig {
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(List.of("http://localhost:3000"));
config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
config.setAllowedHeaders(List.of("*"));
config.setExposedHeaders(List.of("*"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return source;
}
}
여기서 주의할 점은 허용할 HTTP Method
들을 하나 하나 입력해줘야한다는 것이다.
나만 안되는 건지도 모르겠지만... *
를 써서 모두 허용이 안되는 것 같다.
HTTP Method를 일일이 적지 않으려면 와일드카드()를 사용하시면 됩니다.
와일드카드를 사용할 때는 setAllowedMethods() 가 아닌 addAllowedMethod(""); 로 사용하면 됩니다.