Spring security에서 CORS설정하기

🔥Log·2023년 1월 26일
2

스프링

목록 보기
10/18

☕ 개요


이번 글에서는 Spring security에서 글로벌하게 CORS설정을 해보도록 하겠다 🔥

해줘야할 것은 2가지가 있다.

  1. Cors 커스텀 허용하기
  2. Cors 설정하기

1) CORS 커스텀 허용하기


기본적으로 아무것도 설정하지 않으면, 모든 외부 요청에 대해서 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설정을 해줄 수 있다고 한다.


2) 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들을 하나 하나 입력해줘야한다는 것이다.
나만 안되는 건지도 모르겠지만... *를 써서 모두 허용이 안되는 것 같다.

2개의 댓글

comment-user-thumbnail
2024년 8월 5일

HTTP Method를 일일이 적지 않으려면 와일드카드()를 사용하시면 됩니다.
와일드카드를 사용할 때는 setAllowedMethods() 가 아닌 addAllowedMethod("
"); 로 사용하면 됩니다.

1개의 답글