[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마지막에 '/'가 들어가지 않도록 주의해주세요! 방금 '/'때문에 헤매다가 '/'가 원인임을 깨달아서 기록하고자 적게되었습니다. 이상입니다.
Author And Source
이 문제에 관하여([Spring Boot] CORS 오류 해결 소소한 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fftl/Spring-Boot-CORS-오류-해결-소소한-기록저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)