CORS 설정

김인범's avatar
Jan 18, 2025
CORS 설정
notion image
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

taker