스프링부트 CORS 에러 해결 및 필터 위치

Yunny.Log ·2022년 4월 2일
0

Debugging

목록 보기
10/69
post-thumbnail

참고 1)
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

참고 2)
https://www.popit.kr/cors-preflight-%EC%9D%B8%EC%A6%9D-%EC%B2%98%EB%A6%AC-%EA%B4%80%EB%A0%A8-%EC%82%BD%EC%A7%88/

참고 3)
https://jodu.tistory.com/11


  • 스프링부트 CORS 해결로 된 모든 코드를 적용해보았지만 적용이 도저히 되지 않더라

  • 그러던 중 참고 1 블로그 분의 CORS 처리 필터는 인증처리 필터 이전에 있어야 한다는 것을 알게됨

  • 나는 JWT 검증 과정을 구현하느라 DoFilter을 커스텀하는 부분이 있었음

  • 지금까지 이 부분을 까먹 + 무시하고 do filter이라는 부분을 딴데다 또 재정의하고 있었으니 제대로 된 적용이 안된 것

  • 따라서 해당 do filter 커스텀 함수 부분에 cors 헤더 추가하는 코드를 삽입했더니 (setheader 코드들) 깔끔히 해결

    DoFilter을 재정의 해주는 부분에 추가적으로 넣어줘야 한다
    위치를 항상 유념하자

    
       @Override
       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
           HttpServletRequest request1 = (HttpServletRequest) request;
           HttpServletResponse response1 = (HttpServletResponse) response;
           response1.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
           response1.setHeader("Access-Control-Allow-Credentials", "true");
           response1.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
           response1.setHeader("Access-Control-Max-Age", "3600");
           response1.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
    
           String token = extractToken(request);
           if(validateToken(token)) {
               // SecurityContext에 Authentication 객체 저장
               setAuthentication(token);
           }
    
           chain.doFilter(request, response1);
       }

가슴에 새기자 ..

CORS 처리를 위한 Filter는
반드시 인증 처리하는
Filter 이전에 있어야 한다.

CORS 처리를 위한 Filter는
반드시 인증 처리하는
Filter 이전에 있어야 한다.

CORS 처리를 위한 Filter는
반드시 인증 처리하는
Filter 이전에 있어야 한다

0개의 댓글