Access-Control-Allow-Origin (CORS) header 使用过期令牌发出请求时未出现在响应中

Access-Control-Allow-Origin (CORS) header not present in response when making request with an expired token

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

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

的响应

在过期令牌响应中包含 Access-Control-Allow-Origin header 的 spring 方法是什么?

我有一个过滤器,在 zuul 网关上添加了以下 headers,但是在访问令牌过期的请求的情况下,过滤器永远不会被触发。

    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 异常,阻止我的 CORS 过滤器 运行 并添加必要的 Acccess-Control-Allow-Origin header.

添加注释

@Order(Ordered.HIGHEST_PRECEDENCE)

我的 CORS 过滤器成功了。