CORS
CORS란?
Cross-Origin Resource Sharing의 약어로, 웹 애플리케이션이 다른 출처(Origin)의 서버에 리소스를 요청할 때 브라우저가 리소스 접근을 제한하는 보안 정책이다.
출처는 프로토콜, 도메인, 포트로 구성되며, 이 중 하나라도 다르면 다른 출처로 간주되어 CORS 에러가 발생한다.
📌 Spring Boot에서의 CORS 처리 방법
Spring Boot 환경에서는 크게 두 가지 방법으로 CORS를 설정할 수 있다.
🎯 필터를 이용한 방법
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods","*");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization");
if("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
}else {
chain.doFilter(req, res);
}
}
}
🎯 Config 클래스를 이용한 방법 (권장)
보다 Spring Boot스럽게 Config를 이용하여 CORS 설정을 하는 방법이다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 특정 도메인을 명시할 수도 있음
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
이 방법은 설정 클래스 하나로 깔끔하게 관리할 수 있으며 Spring Boot에서 가장 권장하는 방식이다.
📌 Config 방식을 사용할 때 장점
- 코드가 간결하고 명확해 유지보수가 쉬움
- 스프링의 기본 설정 방식과 잘 어울림
- 여러 경로에 서로 다른 CORS 정책을 쉽게 설정 가능
📌 주의사항
- 운영 환경에서는 “*” 사용 대신 허용할 특정 Origin만 명시할 것
- credentials 허용 시 “*” 설정 불가, 명확한 도메인 지정 필요
댓글남기기