복붙노트

[SPRING] Spring에서 CORS 지원을 완전히 비활성화 할 수 있습니까?

SPRING

Spring에서 CORS 지원을 완전히 비활성화 할 수 있습니까?

CORS에서 설명했듯이 Origin 헤더와 Access-Control-Request-Method 헤더가 설정된 OPTIONS 엔드 포인트에 요청을 보내는 경우 표준 헤더로 인해 프리 플라이트 요청이 실패합니다. 그러면 Spring 프레임 워크에 의해 인터셉트되어 메소드가 실행되지 않습니다. 받아 들여진 해결책은 @CrossOrigin 주석을 사용하여 Spring이 403을 반환하는 것을 막는 것입니다. 그러나 Swagger Codegen으로 API 코드를 생성하므로이 기능을 비활성화하고 수동으로 OPTIONS 응답을 구현하고 싶습니다.

그렇다면 스프링에서 CORS 차단을 비활성화 할 수 있습니까?

해결법

  1. ==============================

    1.그들의 문서에서 :

    그들의 문서에서 :

    스프링 웹 MVC를 사용하고 있다면

    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
        }
    }
    

    스프링 부트를 사용하는 경우 :

    @Configuration
    public class MyConfiguration {
    
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**")
                            .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
                }
            };
        }
    }
    

    유리 Yunikov 대답은 정확합니다. 하지만 나는 "커스텀"필터를 좋아하지 않는다.

    스프링 웹 보안이 문제가되는 경우. 이 SO 답변을 확인하십시오.

  2. ==============================

    2.다음 필터를 추가하십시오 (자체 요구 사항 및 지원되는 방법에 맞게 사용자 정의 할 수 있음).

    다음 필터를 추가하십시오 (자체 요구 사항 및 지원되는 방법에 맞게 사용자 정의 할 수 있음).

    @Component
    public class CorsFilter extends OncePerRequestFilter {
    
        @Override
        protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response,
                                        final FilterChain filterChain) throws ServletException, IOException {
            response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH, HEAD");
            response.addHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
            response.addHeader("Access-Control-Expose-Headers", "Access-Control-Allow-Origin, Access-Control-Allow-Credentials");
            response.addHeader("Access-Control-Allow-Credentials", "true");
            response.addIntHeader("Access-Control-Max-Age", 10);
            filterChain.doFilter(request, response);
        }
    }
    
  3. from https://stackoverflow.com/questions/44697883/can-you-completely-disable-cors-support-in-spring by cc-by-sa and MIT license