Spring 引导中禁止的 OPTIONS 请求
OPTIONS request forbidden in Spring Boot
我阅读了很多关于这个问题的线程和解决方案(包括this SO solution),但是在发送预检请求时仍然出现 403 错误。
我正在使用 Spring Data Rest,只要没有发送 OPTIONS,我就可以很好地使用我的存储库。我还没有使用 Spring 安全性,但我计划尽快配置它。这是我当前的配置:
@Configuration
public class GlobalRepositoryRestConfigurer extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.getCorsRegistry().addMapping("/**").allowedOrigins("*").allowedHeaders(
"*").exposedHeaders("Location").allowedMethods("GET", "PUT", "POST", "DELETE",
"OPTIONS");
}
@Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
public DispatcherServlet dispatcherServlet() {
DispatcherServlet dispatcher = new DispatcherServlet();
dispatcher.setDispatchOptionsRequest(true);
return dispatcher;
}
}
我也尝试了 application.properties
选项,并将我的 allowedMethods
设置为 "*"
,但无论如何我都会得到 403。下面是我从 OPTIONS 请求中得到的 request/response headers。
请求headers
Accept text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Access-Control-Request-Headers content-type
Access-Control-Request-Method POST
Connection keep-alive
Host localhost:8080
Origin http://localhost:4000
Referer http://localhost:4000/
User-Agent Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/64.0
响应headers
Allow GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
Content-Length 20
Date Sun, 30 Dec 2018 08:49:00 GMT
你有没有发现任何错误或我可以尝试的其他方法?
我仍然不知道为什么我的配置不适用于 OPTIONS 请求,但我设法使其适用于 WebMvcConfigurer
。这是解决我的问题的配置 class:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedOrigins("*")
.allowedHeaders("*")
.exposedHeaders("Location", "Access-Control-Allow-Origin");
}
}
我阅读了很多关于这个问题的线程和解决方案(包括this SO solution),但是在发送预检请求时仍然出现 403 错误。
我正在使用 Spring Data Rest,只要没有发送 OPTIONS,我就可以很好地使用我的存储库。我还没有使用 Spring 安全性,但我计划尽快配置它。这是我当前的配置:
@Configuration
public class GlobalRepositoryRestConfigurer extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.getCorsRegistry().addMapping("/**").allowedOrigins("*").allowedHeaders(
"*").exposedHeaders("Location").allowedMethods("GET", "PUT", "POST", "DELETE",
"OPTIONS");
}
@Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
public DispatcherServlet dispatcherServlet() {
DispatcherServlet dispatcher = new DispatcherServlet();
dispatcher.setDispatchOptionsRequest(true);
return dispatcher;
}
}
我也尝试了 application.properties
选项,并将我的 allowedMethods
设置为 "*"
,但无论如何我都会得到 403。下面是我从 OPTIONS 请求中得到的 request/response headers。
请求headers
Accept text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Access-Control-Request-Headers content-type
Access-Control-Request-Method POST
Connection keep-alive
Host localhost:8080
Origin http://localhost:4000
Referer http://localhost:4000/
User-Agent Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/64.0
响应headers
Allow GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
Content-Length 20
Date Sun, 30 Dec 2018 08:49:00 GMT
你有没有发现任何错误或我可以尝试的其他方法?
我仍然不知道为什么我的配置不适用于 OPTIONS 请求,但我设法使其适用于 WebMvcConfigurer
。这是解决我的问题的配置 class:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedOrigins("*")
.allowedHeaders("*")
.exposedHeaders("Location", "Access-Control-Allow-Origin");
}
}