Contents
다른 아이피에서 요청을 할 경우 진행되는 로직
Allow-Header의 Content-type, Authorization 중요 ★
Allow-method ⇒ OPTIONS 중요 ★
Credential >> true 중요 ★ (true 일 경우: 2가지 정보[어쏘라이제이션, 쿠키] 보낼 수 있습니다.)
다른 아이피에서 요청을 할 경우 진행되는 로직
Options 요청이 먼저 갑니다. (Preflight 요청)
요청을 통해 SC_OK 응답을 받는데, 이때 Cors 설정 정보가 넘어오게 됩니다.
Origin 설정이 아스트릭크(*)로 되어 있을 경우에는 브라우저에서 보안이 위험하다고 판단하여,
통신을 막습니다.
⇒ 브라우저 자체 블락
Origin 설정이 *가 아닐 경우에는 브라우저에서 여러 요청을 보내게 되어, 통신이 가능해집니다.
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
System.out.println("CORS 필터 작동");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String origin = request.getHeader("Origin");
System.out.println("Origin : "+origin);
response.setHeader("Access-Control-Allow-Origin", origin);
response.setHeader("Access-Control-Expose-Headers", "Authorization");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, PATCH, GET, DELETE, OPTIONS");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Key, Content-Type, Accept, Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
// Preflight 요청을 허용하고 바로 응답하는 코드
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
}else {
chain.doFilter(req, res);
}
}
}
Share article