双token无感刷新结合redis的流程是怎么样的

#jwt##java#首先双token是什么,就是当你点击登录的时候会生成两个token,
第一个叫AccessToken,第二个叫RefreshToken
第一个主要作用就是每次在业务请求是会携带这个token,会设置较短的过期时间,这个token一般储存在浏览器的localStorage属于本地储存,后续由js代码读写
第二个就是RefreshToken一般储存在前端cookie中有httpOnly属性代表它只能通过http协议进行,这个非常的安全,前端是拿不到这个数据的,同时也会在redis中存储这个RefreshToken,AccessToken过期时候通因为只有在协议里可以携带refreshtoken,所以会调用业务接口发送请求,请求里携带了这个RefreahToken,后端生成新的AccessToken返回给前端再进行业务访问,
无感刷新实现的核心操作就是前端js监听到AccessToken过期或者状态码401,立马就向着后端去发送这个refreshToken,
这个时候先在redis中进行验证,假如有这个token然后放行,后端再生成新的AccessToken返回给前端,假如没有这个token比如过期或者黑名单,就返回到登录界面重新进行登录。redis的作用就是验证ReFreshToken是否过期为ReFreshToken设置过期时间或者为ReFreshToken延长过期时间
这是目前学习到的个人看法如果有问题请帮忙指正谢谢
这是个单点登录,用户每次业务访问都要看accessKey是否有效,是否在黑名单中
全部评论

相关推荐

08-16 22:28
宁波大学 Java
put添加元素的流程1 首先会去借助哈希值计算桶索引的值,运算函数为(n-1)&hash值进行与计算。:计算哈希值,jdk7之前是直接引用哈希值计算,而jdk8开始则借助哈希扰动的算法,原理呢就是将原哈希值向右移动16位,异或运算哈希值,将高位哈希值与地位哈希值都可以很好的参与到计算当中,减少哈希冲突的概率2 判断该桶索引位置是否为空,如果为空直接进行存放Node节点。如果不为空,需要遍历链表或者红黑树,去判断是否存在相同的key,如果不同则插入,相同则覆盖。:8开始为尾插,8之前为头插(多线程扩容可能会导致链表出现死循环的问题)插入新节点后3对数组的元素进行计数,当数组当中的元素数量大于负载因子与容量的乘积时,会触发扩容机制,两倍的扩容速度,扩容过程当中存在对元素桶索引的重新分配问题:在jdk7之前会使用(2n-1)&hash重新算一遍桶索引的位置(n为原数组长度):但是在jdk8开始,将(2n-1)&hash进行拆分,拆成(n-1)&hash+n&hash=原索引位置+n&hash,在判断过程当中呢,实现对n&hash的计算即可,判断计算是否为零,为零则保留原索引,不为零则在原索引的基础之上加上旧数组长度,接着移动就简单了,将原先的链表拆分为两个临时链表,后续直接一次性挂载即可。4判断是否需要树化,先判断链表长度,在链表长度达到8的条件下,判断数组长度是否达到64,达到就将链表树化,没达到64就以2倍的速度进行扩容。
如果再来一次,你还会选择...
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务