Spring-Security OAuth WebMVC无效的CORS请求

时间:2016-01-06 22:17:26

标签: spring spring-mvc oauth spring-security cors

希望我的最后一个问题是让所有这些工作。使用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。我应该在哪里看下一个?

2 个答案:

答案 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");
}

这将使用GETPOSTOPTIONS方法为所有映射的请求启用跨源请求。