TIL

[Spring] CORS 허용하는 방법

승무_ 2023. 2. 10. 19:40
@RequiredArgsConstructor
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    private final LoginUserIdArgumentResolver loginUserIdArgumentResolver;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("http://localhost:3000")
            .allowedMethods("OPTIONS", "GET", "POST", "PUT", "DELETE","PATCH");
    }
}

WebMvcConfigurer 인터페이스가 가지고 있는 addCorsMappings 메소드를 오버라이딩 한 후에 위와 같이 http://localhost:3000에 대해서 접근할 수 있는 권한을 주면 됩니다. 위와 같이 설정만 해주면 너무나도 쉽게 SOP를 바로 해결할 수 있습니다.

 

하지만.. 위와 같이 설정을 해주었어도 SOP 문제가 해결되지 않았습니다. 이 때 왜 SOP 문제가 사라지지 않는거지? 서버에서는 분명 접근 권한을 주었는데... 라는 생각이 머리속을 지배하면서 왜 안되는지 원인을 찾기가 쉽지 않았습니다. 결국 많은 삽질과 CORS 동작 원리를 다시 보면서 CORS 이슈가 사라지지 않는 원인을 찾았는데요. 원인은 바로 제가 Spring Security를 사용하고 있기 때문이었습니다.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().configurationSource(request -> {
            var cors = new CorsConfiguration();
            cors.setAllowedOrigins(List.of("http://localhost:3000"));
            cors.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS","PATCH"));
            cors.setAllowedHeaders(List.of("*"));
            return cors;
        });
    }

Spring security에서도 http://localhost:3000에 대해서 접근할 수 있는 권한을 주었더니 해결되었습니다.