对于登录的用户签发其对应的jwt,我们在jwt设置他的固定有效期时间,在有效期内用户携带jwt访问没问题,当过有效期后jwt失效,用户需要重新登录获取新的jwt。这个体验不太好,好的体验应该是:活跃的用户应该在无感知的情况下在jwt失效后获取到新的jwt,携带这个新的jwt进行访问,而长时间不活跃的用户应该在jwt失效后需要进行重新的登录认证。

这里就涉及到了token的超时刷新问题,解决方案看图:

 /*** JWTToken刷新生命周期* 1、登录成功后将用户的JWT生成的Token作为k、v存储到cache缓存里面(这时候k、v值一样)* 2、当该用户在次请求时,通过JWTFilter层层校验之后会进入到doGetAuthenticationInfo进行身份验证* 3、当该用户这次请求JWTToken值还在生命周期内,则会通过重新PUT的方式k、v都为Token值,缓存中的token值生命周期时间重新计算(这时候k、v值一样)* 4、当该用户这次请求jwt生成的token值已经超时,但该token对应cache中的k还是存在,则表示该用户一直在操作只是JWT的token失效了,程序会给token对应的k映射的v值重新生成JWTToken并覆盖v值,该缓存生命周期重新计算* 5、当该用户这次请求jwt在生成的token值已经超时,并在cache中不存在对应的k,则表示该用户账户空闲超时,返回用户信息已失效,请重新登录。* 6、每次当返回为true情况下,都会给Response的Header中设置Authorization,该Authorization映射的v为cache对应的v值。* 7、注:当前端接收到Response的Header中的Authorization值会存储起来,作为以后请求token使用* @param userName* @param passWord* @return*/public boolean jwtTokenRefresh(String userName,String passWord){HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();String token = httpServletRequest.getHeader(Constants.TOKEN);String cacheTokenKey = String.valueOf(EhcacheUtils.getInstance().get("matedataManagement", token));System.out.println(cacheTokenKey == null);if(!StringUtils.isEmpty(cacheTokenKey) && !cacheTokenKey.equals("null")){if (!JWTUtil.verify(token, userName, passWord)) {String newAuthorization=JWTUtil.sign(userName, passWord);EhcacheUtils.getInstance().put("matedataManagement", cacheTokenKey, newAuthorization, JWTUtil.getExpireTime()/1000);}else {EhcacheUtils.getInstance().put("matedataManagement", cacheTokenKey, cacheTokenKey,JWTUtil.getExpireTime()/1000);}response.setHeader("Authorization", String.valueOf(EhcacheUtils.getInstance().get("matedataManagement", cacheTokenKey)));return true;} return false;}

JWTToken超时刷新策略相关推荐

  1. 前后端分离——token超时刷新策略

    前言 记录一下前后端分离下----token超时刷新策略! 需求场景 昨天发了一篇记录 前后端分离应用--用户信息传递 中介绍了token认证机制,跟几位群友讨论了下,有些同学有这么一个疑惑:toke ...

  2. hibernate jpa_JPA /Hibernate刷新策略初学者指南

    hibernate jpa 介绍 在我以前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并 ...

  3. JPA /休眠刷新策略初学者指南

    介绍 在我之前的文章中,我介绍了实体状态转换 对象关系映射范例. 当刷新当前持久性上下文时,所有管理实体状态转换都将转换为关联的数据库语句. Hibernate的刷新行为并不总是像人们想象的那么明显. ...

  4. win10如何用命令刷新策略

    在Win10中,你可以使用以下命令来刷新本地组策略: 打开命令提示符:按下"Win+R"键,输入"cmd"并按下"Enter"键. 在命令提 ...

  5. Kafka日志刷新策略

    Kafka的日志实际上是开始是在缓存中的,然后根据策略定期一批一批写入到日志文件中去,以提高吞吐率. 属性名 含义 默认值 log.flush.interval.messages 消息达到多少条时将数 ...

  6. Shiro和SpringBoot简单集成

    Shiro是一种简单的安全框架,可以用来处理系统的登录和权限问题. 本篇记录一下Spring Boot和Shiro集成,并使用Jwt Token进行无状态登录的简单例子. 参考Demo地址,此Demo ...

  7. 基于shiro+jwt的真正rest url权限管理,前后端分离

    代码地址如下: http://www.demodashi.com/demo/13277.html bootshiro & usthe bootshiro是基于springboot+shiro+ ...

  8. Windows Server 2012远程刷新客户端组策略及IE代理设置图文教程

    Windows Server 2012远程刷新客户端组策略及IE代理设置图文教程 https://www.jb51.net/os/2012/542694.html 发布时间:2017-03-21 16 ...

  9. php jwt token刷新方案,JWT刷新token策略

    springcloud的项目用JWT做身份验证,对于token过期时间的刷新策略整理如下图: 刷新策略 在登录接口中返回两个token,一个是用来请求业务接口验证身份信息的accessToken,一个 ...

最新文章

  1. matlab产生一列相同的数据,读取excel中的数据把第一列相同的所有行数据输出成一个excel...
  2. 笔记-高项案例题-2016年下-整体管理
  3. Weka加载大数据量内存不足的解决办法
  4. php 复制行,phpstorm怎么快速复制当前行?
  5. Vim文本编辑器 指令簿(二)
  6. Hexo博客搭建与部署
  7. 理解CapsuleNetwork2
  8. 玩转Docker镜像
  9. html语言中bodyalink表示,HTML语言中,
  10. 【TGRS】Ship Detection in Large-Scale SAR Images Via Spatial Shuffle-Group Enhance Attention译读笔记
  11. error: expected expression before ‘struct
  12. CImage 获取图片RGB 、图片高和宽;
  13. msl3等级烘烤时间_MSL(湿气敏感性等级)
  14. elasticsearch-head离线安装
  15. BDWK免费下载白嫖指南【1s搞定】
  16. P4设计实现链路监控
  17. python 同时赋值_python同时给多个变量赋值
  18. 分布式服务器框架之Server.Core库中实现 XXTEA分组加密算法
  19. 容联云AI科学院研发先进KBQA能力,问鼎大规模中文知识图谱问答权威性测评
  20. mysql applier_新特性解读 | MySQL 8.0.18 有权限控制的复制

热门文章

  1. Linux系统编程23:基础IO之了解硬盘物理和逻辑结构及明白inode的本质和掌握软硬链接及其区别
  2. poj3187 穷竭搜索 挑战程序设计大赛
  3. Centos普通用户权限报错:** is not in the sudoers file. This incident will be reported.
  4. crontab命令使用记录(精,反弹shell)
  5. Thinkphp V5.X 远程代码执行漏洞 - POC(精:集群5.0*、5.1*、5.2*)
  6. Supervisor进程守护监控
  7. 语法分析与中间代码生成
  8. 二维数组子数组矩形和
  9. 如何执行字符串的PHP代码
  10. Oracle所有分析函数转