Springboot CORS
🧩 Spring Boot CORS란
정의
Spring Boot에서의 CORS 설정은 브라우저의 Same-Origin Policy를 우회할 수 있도록 허용 Origin, Method, Header를 서버에서 정의하는 과정이다. Spring Security를 함께 쓰는 경우에는 보안 필터 체인 안에서 CORS를 활성화해야 한다.
- 프론트엔드와 백엔드가 서로 다른 Origin일 때 필요하다.
- 보통
http.cors()와CorsConfigurationSource를 함께 사용한다. - 허용 범위를 너무 넓게 열지 않도록 주의해야 한다.
⚙️ SecurityConfig 예시
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.cors().and()
.csrf().disable()
.authorizeRequests()
.antMatchers("/api/**").authenticated()
.anyRequest().permitAll()
.and()
.formLogin()
.successHandler((req, res, auth) -> res.setStatus(HttpServletResponse.SC_OK))
.failureHandler((req, res, e) -> res.setStatus(HttpServletResponse.SC_UNAUTHORIZED))
.and()
.userDetailsService(userService);
return http.build();
}
의미
http.cors()는 Spring Security 필터 체인에서 CORS 처리를 활성화한다.csrf().disable()은 별개 설정이므로 CORS와 혼동하지 않아야 한다.authorizeRequests()는 인증/인가 정책을 담당한다.
⚙️ CORS Configuration 예시
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowedOriginPatterns(List.of("http://localhost:5173"));
config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
config.setAllowedHeaders(List.of("*"));
config.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return source;
}
🧠 주요 개념
| 항목 | 설명 |
|---|---|
| SecurityFilterChain | Spring Security HTTP 보안 설정 |
| Form Login | 기본 로그인 방식 |
| UserDetailsService | 사용자 정보 로딩 |
| CORS | 다른 Origin에서의 요청 허용 |
| SuccessHandler | 로그인 성공 처리 |
| FailureHandler | 로그인 실패 처리 |
⚠️ 주의사항
Access-Control-Allow-Origin에*를 쓰면서Allow-Credentials=true를 함께 쓰면 안 된다.- 브라우저가 보내는 Preflight 요청(
OPTIONS)을 막지 않아야 한다. - 인증이 필요한 API는 허용 Origin을 가능한 한 좁게 설정하는 것이 좋다.
allowedOriginPatterns는 동적 패턴이 필요할 때 유용하지만 운영에서는 신중하게 써야 한다.
📌 정리
- Spring Boot CORS는 브라우저의 교차 출처 요청을 서버에서 허용하는 설정이다.
- Spring Security와 함께 쓸 때는
http.cors()와CorsConfigurationSource구성이 핵심이다. - 설정 후에는 콘솔, Network, Preflight 순서로 실제 동작을 확인하는 것이 좋다.
댓글남기기