希望我的最后一个问题是让所有这些工作。使用Spring Security OAuth 2.0.8和Spring-Web MVC 4.2.3公开OAuth端点(大多数系统使用RESTEasy作为REST端点,它有自己的CORS过滤器)。
我正在尝试使用现在在Web MVC 4.2.x中的全局默认CORS支持。但是,当针对/ oauth / token端点发出测试预检请求时,我总是返回403无效的CORS请求响应。来自Fiddler的样品请求如下。
OPTIONS http://localhost:8080/myapp/oauth/token HTTP/1.1
User-Agent: Fiddler
Host: localhost:8080
Origin: http://testfakeorigin.overtherainbow.com
Access-Control-Request-Method: POST
即使这经历了并且被确定为正确的预检请求,看起来该请求在第81行的DefaultCorsProcessor中失败,因为CorsConfiguration为null。即使我在我的WebMvcConfigurerAdapter中明确添加了一个CORS注册表映射(根据文档不应该这样做),配置仍然最终为null。我应该在哪里看下一个?
答案 0 :(得分:1)
您可以在@Configuration类中自定义整个应用程序的CORS(跨源资源共享),这样您的所有控制器都将自动覆盖。看看:
@Configuration
@EnableWebSecurity( debug = true )
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/* ... configurations */
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration().applyPermitDefaultValues();
config.addAllowedMethod(HttpMethod.POST);
config.addAllowedMethod(HttpMethod.GET);
config.addAllowedMethod(HttpMethod.PUT);
config.addAllowedMethod(HttpMethod.DELETE);
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
}
注意:您可以定义将在配置中应用的方法动词
最诚挚的问候!
答案 1 :(得分:0)
在实际POST
之前,您可能会自动发出OPTIONS
个请求。截至default,只允许RequestMapping
中指定的方法。因此,您必须明确允许交叉原始请求的OPTIONS
方法。
使用全局配置的一种方法如下:
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("GET", "POST", "OPTIONS").allowedOrigins("http://testfakeorigin.overtherainbow.com");
}
这将使用GET
,POST
和OPTIONS
方法为所有映射的请求启用跨源请求。