[Spring Boot] CORS 오류 해결 소소한 기록

프로젝트를 진행 하던 중 흔하게 발생하는 Cross-Origin Resource Sharing,CORS 에러가 발생했습니다.

Spring Boot에서 해결하는 방법 중 하나인 response header에 직접 허용을 추가하는 방식을 사용했는데 왠지 모르게 계속 에러가 발생했고, 미궁에 빠지나 했지만 매우 사소한 수정으로 해결이 되었습니다.

일단 제가 구글링을 통해서 해결한 방식을 간단하게 소개해보겠습니다.

  • 일단 프로젝트 내에 어떤 위치에든 filter 폴더를 만들어준 뒤 CorsFilter.java 파일을 하나 생성해줍니다.

  • 그리고 내용은 아래의 내용으로 채워주는데 Filter를 import 할 때에는 javax.servlet의 것을 import 해야 합니다.

@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;
		
        //여기에 내가 허용하고자 하는 클라이언트의 url을 입력해 줍니다. 
        //주의사항 "https://myurl.com/" 처럼 마지막에 '/'를 붙이면 CORS에러가 그대로 발생하게 됩니다.
        response.setHeader("Access-Control-Allow-Origin", "https://myurl.com"); 
        //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);
        }
    }

    @Override
    public void destroy() {

    }
}

저도 처음에는 간편한 방법인 @CrossOrigin 을 이용했었는데 이유는 모르겠지만 계속 CORS에러가 발생했고, 확실한 방법인 위의 방법을 사용하게 되었습니다. url마지막에 '/'가 들어가지 않도록 주의해주세요! 방금 '/'때문에 헤매다가 '/'가 원인임을 깨달아서 기록하고자 적게되었습니다. 이상입니다.

좋은 웹페이지 즐겨찾기