Spring MVC CORS 不适用于错误控制器



我把我的Spring MVC应用程序配置为使用CORS:

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**");
}

这对于成功的请求很有效,但是当引发异常并由我的错误处理程序拾取时,不会添加 CORS 标头。

@ControllerAdvice
public class ApiErrorHandler {
   @ExceptionHandler(value = HttpClientErrorException.class)
   public ResponseEntity badRequest(Exception ex) 
   {
       return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ErrorBodyWrapper.wrapErrorInJson(ex.getMessage()));
   }
}

CORS 不适用于错误处理程序有什么原因吗?

谢谢

我认为默认情况下添加到映射中的唯一方法是 GET,在您的"addCorsMappings"中,尝试指定要将标头添加到的方法

       registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD");

使用 Spring CorsFilter 可以解决此问题。

    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }

相关内容

最新更新