Spring security 使用过期令牌发出请求时,响应中不存在访问控制允许源(CORS)标头

Spring security 使用过期令牌发出请求时,响应中不存在访问控制允许源(CORS)标头,spring-security,spring-security-oauth2,Spring Security,Spring Security Oauth2,我正在使用spring-security-oauth2构建一个应用程序。总的来说,一切都很好,我有三个独立的客户端使用我创建的一个简单API。所有客户端应用程序都从不同的域调用API。所有应用都可以使用客户端凭据授权注册成员,然后获得密码授权访问令牌和刷新令牌 但是,对于所有三个客户端,当使用过期的访问令牌发送请求时,来自资源服务器的响应不包括访问控制允许源标头。这是hal浏览器和angular应用程序的一个问题,因为它们依赖具有访问控制允许原点标题的响应 spring在过期的令牌响应中包含访问

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

但是,对于所有三个客户端,当使用过期的访问令牌发送请求时,来自资源服务器的响应不包括访问控制允许源标头。这是hal浏览器和angular应用程序的一个问题,因为它们依赖具有访问控制允许原点标题的响应

spring在过期的令牌响应中包含访问控制允许源报头的方式是什么

我有一个过滤器在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");

在深入研究spring代码之后,发现这个问题是由过滤器执行顺序引起的。首先调用OAuth筛选器并引发InvalidAccessToken异常,从而阻止my CORS筛选器运行并添加必要的ACCESS Control Allow Origin头

添加注释

@Order(Ordered.HIGHEST_PRECEDENCE)

我的CORS筛选器完成了这项任务。

在深入研究spring代码后,发现此问题是由筛选器执行顺序引起的。首先调用OAuth筛选器并引发InvalidAccessToken异常,从而阻止my CORS筛选器运行并添加必要的ACCESS Control Allow Origin头

添加注释

@Order(Ordered.HIGHEST_PRECEDENCE)

我的CORS过滤器成功了。

非常感谢!我花了一整天的时间在这个问题上,非常感谢!我在这个问题上花了一整天的时间