[Spring] preflight request : CORS 정책 위반
preflight request : CORS 정책 위반
preflight request이란?
본 요청을 보내기 전에 먼저 OPTIONS
메서드를 통해 HTTP 요청을 보내 실제 요청이 전송하기에 안전한지 확인하는 방식을 말합니다.
문제 상황
배포 후 fittering-FE 로컬에서 테스트 시 다음 에러가 발생했습니다.
Access to fetch at ‘https://fit-tering.com/api/v1/malls/1’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: Redirect is not allowed for a preflight request.
해결
스프링 시큐리티 설정 클래스 SecurityConfig
에서 CorsUtils.isPreFlightRequest()
에 true인 모든 request에 대해
별도 인증이 필요하지 않도록 permitAll()
을 설정했습니다.
.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(CorsUtils::isPreFlightRequest).permitAll() //추가
...
아래는 CorsUtils.isPreFlightRequest()
내용으로,
request
에 대해 3가지를 체크하고 하나라도 만족하지 않을 시 false
를 리턴합니다.
public static boolean isPreFlightRequest(HttpServletRequest request) {
return (HttpMethod.OPTIONS.matches(request.getMethod()) && //HTTP 메소드가 OPTIONS인지
request.getHeader(HttpHeaders.ORIGIN) != null && //헤더에 origin 필드가 비어있는지
request.getHeader(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD) != null); //헤더에 Access-Control-Request-Method가 비어있는지
}
댓글남기기