我把我的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;
}