티스토리 뷰

스프링

cors를 해결

kOsari 2023. 8. 8. 17:36

가장 중요한 점!!!!

CORS 는 에러나 오류가 아니다. Cross-Origin Resource Sharing Policy 이다.

즉 보안 정책 중 하나 이다.

 

CORS 의 간단 플로우

  1. GET 요청인지 POST 요청인지 파악한다.
  2. Content-Type 과 Custom HTTP Header 를 파악한다.
  3. OPTIONS 요청을 통해서 서버가 적절한 Access-Control-* 를 가졌는지 확인한다.
  4. 만약 적절한 Access-Control 을 가졌다면 실제 XHR을 트리거한다.
  5. 적절하지 못한 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함