
token过期后,需要前端携带旧的token去请求后端接口置换新的token
当token过期,一个页面异步同时发出多个请求时,多接口都携带旧token去请求,
不同时间返回401错误,挨个都去置换token造成被多次刷新异常。
使用async、await函数把页面所有异步请求变成同步,等待上一个执行完毕再执行下一个请求。
在响应拦截器中第一个返回401执行刷新token的 *** 作时候,设置一个正在更新token的状态,
其他的异步并发的请求返回401被拦截下来就不要去重复的执行更新token,用函数的形式暂存起来,
等待更新完毕再一起重新发起。
以上已经实现异步请求并发时,暂存错误队列,等待token刷新成功后统一重新发起请求的问题。
有描述不清楚或者错误的地方欢迎提出指正。
//sessinonStorage只在当前窗口有效 生命随浏览器关闭终止 容量约5M
windowsessionStoragesetItem("name",'男');
//获取name
consolelog(windowsessionStoragegetItem('name'));
//清空Storage
windowsessionStorageclear();
//删除数据
windowsessionStorageremoveItem('age')
先打开a页面储存name 在打开桌面b获取时会获取不到如下图
但是在a页点击a链接跳转b却可以获取到
当跳转到b时修改name,在返回a页查看name, a页并没有发生改变(这说明a和b页面不是公用的一个sessionStorage,而是在页面跳转时a传给了b)
//localStorage在关闭浏览器后依然有效 容量约20M
//放入缓存中
windowlocalStoragesetItem('userToken', token);
//获取
consolelog(windowlocalStoragegetItem("userToken"))
//删除数据
windowsessionStorageremoveItem('userToken')
关于表单重复提交的控制在不同的层面有不同的实现方法。最简单的就是前端按钮提交之后置灰控制。另外对于绕过前端恶意重复提交的行为就需要在服务端进行控制。大致分为两类。第一类为web容器对请求进行控制,第二类为业务系统幂等控制。
这里介绍一下通过token实现web容器重复请求控制。
原理: 1表单打开时向后端申请一个token。
2表单提交时将token一并提交
3controller处理请求时检查token,如果token存在则删除这个token并判定请求合法。
注意:redis要用删除 *** 作来判断token,删除成功代表token校验通过,如果用select+delete来校验token,存在并发问题,不建议使用
实现例子:
1 创建一个TokenUtil类,用来生成token和token校验
2获取token的controller
3 token判定的应用
以上就是关于前端刷新token,重新发起请求,异步并发请求处理。全部的内容,包括:前端刷新token,重新发起请求,异步并发请求处理。、浏览器缓存 前端页面获取存放token、token防止前端重复提交等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)