在使用过期令牌发出请求时,Access-Control-Allow-Origin(CORS)标头不响应

时间:2016-05-20 23:32:38

标签: spring-security spring-security-oauth2

我使用spring-security-oauth2来构建应用程序。一般来说,一切都运行正常,我有三个独立的客户端使用我创建的简单API。所有客户端应用程序都从不同的域调用API。所有应用程序都可以使用客户端凭据授予注册成员,然后获取密码授予访问权限和刷新令牌。

但是,对于所有三个客户端,当使用过期的访问令牌发送请求时,来自资源服务器的响应不包括Access-Control-Allow-Origin头。这是hal-browser和angular app的问题,因为它们依赖于具有Access-Control-Allow-Origin标头的响应。

在过期的令牌响应中包含Access-Control-Allow-Origin标头的弹簧方式是什么?

我有一个过滤器在zuul网关上添加以下标头,但是对于带有过期访问令牌的请求,过滤器永远不会被触发。

    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, HEAD");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers",
            "X-Requested-With, WWW-Authenticate, Authorization, Origin, Content-Type, Version");
    response.setHeader("Access-Control-Expose-Headers",
            "X-Requested-With, WWW-Authenticate, Authorization, Origin, Content-Type");

1 个答案:

答案 0 :(得分:4)

在深入了解Spring代码之后,结果发现此问题是由过滤器执行的顺序引起的。首先调用OAuth过滤器并抛出InvalidAccessToken异常,阻止我的CORS过滤器运行并添加必要的Acccess-Control-Allow-Origin标头。

添加注释

@Order(Ordered.HIGHEST_PRECEDENCE)

到我的CORS过滤器就行了。