CORS란?
기존 브라우저의 정책(Single Origin Policy)은 보안상의 이유로 다른 도메인의 리소스를 가져오는 것이 불가능했다.
이를 해결하기 위해 등장한 표준 기술이 CORS (Cross Origin Resource Sharing)이다. CORS는 도메인이 다른 자원에 리소스를 요청할 때 접근 권한을 부여하는 매커니즘이다. 추가적인 Http Header를 이용하여 애플리케이션이 다른 origin의 리소스에 접근할 수 있도록 하는 것이다.
public class PathApiController {
@CrossOrigin("http://localhost:6666") //localhost:6666에 대해서만 개방한다.
@GetMapping("/paths")
public ResponseEntity findPath() {
...
}
}
Configuration에 명시해서 CORS를 설정할 수도 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("*").allowedOriginPatterns("*");
}
}
여기서 추가적으로, Interceptor와 같은 것을 이용하면 CORS가 발생하는데, 이는 검증이 이루어지기 전에 요청이 반환되어 일어날 수 있다. 이러한 경우에는 Option을 true로 변경함으로서 해결할 수 있다. 이 방법으로 prefilght를 true로 만들어줄 수 있다.
if (HttpMethod.OPTIONS.matches(request.getMethod())) {
return true;
}