Spring Boot 3.0 이상에서 CORS 문제 해결하기

메밀·2023년 10월 11일
2

1. 안 나오면 섭섭한 CORS policy 설정 오류

반갑다

Spring Boot 3.1로 프로젝트를 '가볍게' 하나 세팅해보려다 어김없이 CORS 오류와 만났다.
제목엔 호기롭게 안 나오면 섭섭하다고 적었지만, 솔직히 저 오류 안 뜬다고 정말로 섭섭할 것 같진 않다 ㅋㅋㅋ

아무튼 이 포스팅에선 Spring Boot 3.0 이상에서의 CORS 설정에 대해 다룬다.
간단히 로그인 API 하나 만들어서 테스트했고, 자세한 프로젝트 버전은 다음과 같다.

Spring Boot 3.1
Spring Security 6.1.4
(React 18.2)

2.7 버전부터 반복되는 의문🫠..인데, 공식문서가 시키는대로 했는데 왜 안 되는 것인지?

2. Spring Boot 3.0 이상, Spring Security에서 CORS 설정하기

2.7 버전과 마찬가지로 설정 클래스를 작성해주면 된다.
3.1에서는 문법이 꽤 바뀐 걸 확인할 수 있다.

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

	// ⭐️ CORS 설정
    CorsConfigurationSource corsConfigurationSource() {
        return request -> {
            CorsConfiguration config = new CorsConfiguration();
            config.setAllowedHeaders(Collections.singletonList("*"));
            config.setAllowedMethods(Collections.singletonList("*"));
            config.setAllowedOriginPatterns(Collections.singletonList("http://localhost:3000")); // ⭐️ 허용할 origin
            config.setAllowCredentials(true);
            return config;
        };
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.httpBasic(HttpBasicConfigurer::disable)
                .cors(corsConfigurer -> corsConfigurer.configurationSource(corsConfigurationSource())) // ⭐️⭐️⭐️
                .csrf(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests(authorize ->
                        authorize
                                .requestMatchers("/login").permitAll()
                );

        return httpSecurity.build();
    }
}

참고
스택오버플로우 늘 감사합니다...

1개의 댓글

comment-user-thumbnail
2024년 4월 18일

감사합니다.. ㅜ 두시간동안 해결 못 한 문제를 해결했어요

답글 달기