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.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();
}
}
참고
스택오버플로우 늘 감사합니다...
감사합니다.. ㅜ 두시간동안 해결 못 한 문제를 해결했어요