我正在使用spring-security-oauth2构建应用程序。总的来说,一切正常,我使用创建的简单API拥有三个独立的客户端。所有客户端应用程序都从不同的域调用API。所有的应用程序都可以使用客户端证书授予来注册成员,然后获得密码授予访问令牌和刷新令牌。
但是,对于所有三个客户端,当使用过期的访问令牌发送请求时,来自资源服务器的响应不包括Access-Control-Allow-Origin标头。对于hal-browser和angular应用程序来说,这是一个问题,因为它们依赖于具有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");
深入研究Spring代码后,事实证明此问题是由过滤器执行顺序引起的。首先调用OAuth过滤器,并引发InvalidAccessToken异常,从而阻止我的CORS过滤器运行,并添加必要的Acccess-Control-Allow-Origin标头。
添加注释
@Order(Ordered.HIGHEST_PRECEDENCE)
到我的CORS过滤器就成功了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句