spring oauth重复点击授权后报错Cannot approve uninitialized
来源:互联网 发布:门窗cad制图软件 编辑:程序博客网 时间:2024/06/10 05:35
现象:
在网络环境特别差等环境下,用户如果重复点击授权按钮,会导致spring报错: Cannot approve uninitialized authorization request
原因:
AuthorizationEndpoint类中,有一行代码:
finally { sessionStatus.setComplete();}
sessionStatus标记了spring-security的session生命周期状态,当标记为session生命周期结束后,spring会调用sessionAttributesHandler.cleanupAttributes(request)方法,去清除spring-security上下文请求。对应到oauth的话,这个请求就是放在上下文请求map中的authorizationRequest对象,这个对象封装了authorize接口所用到的请求参数,如appid,redirect_uri,scope等,如果这个对象被从spring-security上下文请求中清掉了,那么整个oauth的流程自然也就断了
解决:
1.限制授权按钮,只能点击一次,这是治本的方法,从源头限制用户多次点击的可能性 2.修改后台,将authorizationRequest手动传到session用户请求上下文中(spring-security请求上下文和用户的session上下文是不同的),再从session中获取authorizationRequest,这是治标的方法,即使用户重复点击了,oauth流程还是能继续执行
model.put("authorizationRequest", authorizationRequest);HttpSession session = request.getSession();session.setAttribute("authRequest", authorizationRequest);return getUserApprovalPageResponse(model, authorizationRequest);
if (authorizationRequest == null) { HttpSession session = request.getSession(); Object obj = session.getAttribute("authRequest"); if (obj != null) { authorizationRequest = (AuthorizationRequest) obj; }}
0 0
- spring oauth重复点击授权后报错Cannot approve uninitialized
- spring oauth重复点击授权后报错Cannot approve uninitialized authorization request
- oauth授权
- OAuth 授权
- OAuth 授权
- OAuth授权
- OAuth授权
- oauth点击授权之后,不Callback到指定url
- OAuth初识 && OAuth授权流程
- Java实现OAuth授权
- Oauth授权理解图
- OAuth开放授权
- OAuth授权机制
- oAuth 授权及其他
- OAUTH认证授权流程
- OAuth(开放授权)
- OAuth(开放授权)
- 什么是OAuth授权?
- 加息券功能设计
- spring-oauth集成cas单点登录,登陆完成进入授权页面后,按回退按钮进入404页面的问题
- PLSQL插入数据中文乱码的问题
- 安卓获取网页源码
- spring-oauth集群负载的cas单点登出问题
- spring oauth重复点击授权后报错Cannot approve uninitialized
- LeetCode Simplify Path
- Apache2日志格式
- mongodb在java中的分页查询
- spark源码走读(1)
- 使用AOP 实现Redis缓存注解,支持SPEL(转)
- 电脑同时开有线和无线,优先使用哪个?
- ES6学习——迭代器(Iterators):内置可迭代对象汇总
- Spring Boot 环境变量读取 和 属性对象的绑定