Tengo mi aplicación Spring MVC configurada para usar CORS como tal:
@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**"); }Esto funciona bien para solicitudes exitosas; sin embargo, cuando se lanza una excepción y mi controlador de errores la detecta, los encabezados CORS no se agregan.
@ControllerAdvice public class ApiErrorHandler { @ExceptionHandler(value = HttpClientErrorException.class) public ResponseEntity badRequest(Exception ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ErrorBodyWrapper.wrapErrorInJson(ex.getMessage())); } }¿Hay alguna razón por la que CORS no funcione para los controladores de errores?
Gracias
Creo que, de forma predeterminada, el único método agregado al mapeo es GET. En su "addCorsMappings", intente especificar los métodos a los que desea agregar el encabezado.
registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD");El uso de Spring CorsFilter puede resolver este problema.
@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; }