As described in CORS preflight request fails due to a standard header if you send requests to OPTIONS
endpoints with the Origin
and Access-Control-Request-Method
headers set then they get intercepted by the Spring framework, and your method does not get executed. The accepted solution is the use @CrossOrigin
annotations to stop Spring returning a 403
. However, I am generating my API code with Swagger Codegen and so I just want to disable this and implement my OPTIONS
responses manually.
So can you disable the CORS interception in Spring?
From their documentation:
If you are using Spring Web MVC
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
}
}
If you are using Spring Boot:
@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");
}
};
}
}
Yuriy Yunikov answer is correct as well. But I don't like the "custom" filter.
In case you have Spring Web Security which causes you trouble. Check this SO Answer.