前端刷新token,重新发起请求,异步并发请求处理。

前端刷新token,重新发起请求,异步并发请求处理。,第1张

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防止前端重复提交等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9778149.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存