티스토리 뷰
가장 중요한 점!!!!
CORS 는 에러나 오류가 아니다. Cross-Origin Resource Sharing Policy 이다.
즉 보안 정책 중 하나 이다.
CORS 의 간단 플로우
- GET 요청인지 POST 요청인지 파악한다.
- Content-Type 과 Custom HTTP Header 를 파악한다.
- OPTIONS 요청을 통해서 서버가 적절한 Access-Control-* 를 가졌는지 확인한다.
- 만약 적절한 Access-Control 을 가졌다면 실제 XHR을 트리거한다.
- 적절하지 못한 Access-Control 를 가졌다면 Error 를 발생시킨다.
CorsFilter 생성하기
CorsFilter 클래스를 생성하고 다음과 같이 작성한다.
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@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", "http://localhost:3000");
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);
}
}
@Override
public void destroy() {
}
}
옵션은 적절히 설정한다.
CrossOrigin 어노테이션 사용하기
@CrossOrigin(origins = "http://front-server.com")
컨트롤러에 해당 메소드에 위와 같이 작성하면 된다.
WebMvcConfigurer 에서 설정하기
@SpringBootApplication
public class RestServiceCorsApplication {
public static void main(String[] args) {
SpringApplication.run(RestServiceCorsApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://front-server.com");
}
};
}
}
main함수에 다음과 같이 작성하면 된다.
'스프링' 카테고리의 다른 글
스프링 부트 빌드 (0) | 2023.08.09 |
---|---|
Fetch Join이란 (0) | 2023.08.08 |
스프링 시큐리티 로그인 (0) | 2023.07.04 |
스프링 시큐리티 권한 로그인 설정 (0) | 2023.07.04 |
express 스프링으로 옮기기 프로젝트 - 2 (0) | 2023.06.04 |