cors 개념은 인파님 블로그를 참고하자.
프론트와 api 연동 중 cors 에러가 발생했다.
어라라? 이전에는 잘 작동했는데.. 갑자기? A api는 되고, B api는 안되고.. 내가 알고있던 지식으로는 전혀 이해가 가지 않았다.
분명히 webConfig에서 해당 프론트 도메인에 관한 origin은 열어주었는데 말이다.
로그와 개발자 도구를 확인해보았다.
알아보니 preflight 요청이 정상적으로 응답되지 않아 발생한 문제였다.
인증이 필요한 api에서 preflight 요청이 왔는데 해당 preflight에 인증 헤더가 없어서 401에러가 발생하였고,
preflight 요청이 정상적으로 돌아오지 않자 이후 실제 api요청은 보내지 않은채 cors 에러가 발생한 것이다!
preflight는 options 메소드이고, 해당 메소드는 안전한 메소드이기때문에 filter에서 해당 메소드일 경우 통과하도록 코드를 변경하여 해결하였다.
이전 코드
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String requestURI = httpRequest.getRequestURI();
if (isLoginCheckPath(requestURI)) {
....
return;
}
chain.doFilter(request, response);
}
변경한 코드
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String requestURI = httpRequest.getRequestURI();
String requestMethod = httpRequest.getMethod();
if (!requestMethod.equals("OPTIONS") && isLoginCheckPath(requestURI)) {
....
return;
}
chain.doFilter(request, response);
}
'springboot' 카테고리의 다른 글
multipartForm 415 에러.. (0) | 2023.03.11 |
---|