我正在开发一个 REST 应用程序。 使用 Spring Security 开箱即用的 oauth2 授权。
但是当当前授权cookie已过期或删除并且对各种api的许多请求并行执行时,就会出现问题。 例如:
/api/books
/api/categories
/api/authors
这三个请求异步发送后,这些请求将被重定向到授权。
结果,我得到了这张图片:
/api/books
/api/categories
/api/authors
http://127.0.0.1:8081/login
http://127.0.0.1:8081/login
http://127.0.0.1:8081/login
http://127.0.0.1:8081/oauth/authorize?client_id=client&redirect_uri=http://127.0.0.1:8081/login&response_type=code&state=9PO7rO
http://127.0.0.1:8081/oauth/authorize?client_id=client&redirect_uri=http://127.0.0.1:8081/login&response_type=code&state=d2O7j1
http://127.0.0.1:8081/oauth/authorize?client_id=client&redirect_uri=http://127.0.0.1:8081/login&response_type=code&state=9541sf
http://127.0.0.1:8081/login?code=w7lmSA&state=9PO7rO (one of these queries returns status 401)
http://127.0.0.1:8081/login?code=gf41sd&state=d2O7j1 (one of these queries returns status 401)
http://127.0.0.1:8081/login?code=kj74sx&state=9541sf (one of these queries returns status 401)
事实证明,最后三个查询之一始终包含状态 401 的错误(消息:“身份验证失败:无法获取访问 token ”)
我不明白为什么会发生这个错误。
您能澄清一下在这种情况下需要做什么吗? spring本身能解决这个问题吗?可能需要以某种方式进行额外配置。
最佳答案
我是如何解决这个问题的:
- 在 application.properties 中禁用异步处理:
security.filter-dispatcher-types=REQUEST, ERROR
在 WebSecurityConfigurerAdapter 中禁用 sessionFixation
@配置 公共(public)类 SecurityConfiguration 扩展 WebSecurityConfigurerAdapter { @覆盖 公共(public)无效配置(HttpSecurity http)抛出异常{ //... http.sessionManagement() .sessionFixation() 。没有任何(); } }
关于java - 如何防止Spring Security OAuth2中多次查询API出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693972/