前一段时间讲过了springboot+jwt的整合,但是因为一些原因(个人比较懒)并没有更新关于token的刷新问题,今天跟别人闲聊,聊到了关于业务中token的刷新方式,所以在这里我把我知道的一些点记录一下,也希望能帮到一些有需要的朋友,同时也希望给我一些建议,话不多说,上代码!
1:这种方式为在线刷新,比方说设定的token有效期为30min,那么每次访问资源时,都会在拦截器中去判断一下token是否过期,如果没有过期就刷新token的时间为30min,反之则会重新登录,需要注意的是这种方式我是在登录以后就将token存在了redis
//登录方法中将token存在redis String token = JwtUtil.sign(userName,user.getId()); redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, token,UserConstants.TOKEN_EXPIRE_TIME); Map map=new HashMap(); map.put("token", token); return Result.success(map); //在拦截器中获取token,并判断token的有效期 String token = req.getHeader(UserConstants.ACCESS_TOKEN); if (Strings.isNullOrEmpty(token)) { return false; } Object reqToken=redisUtil.get(UserConstants.PREFIX_USER_TOKEN+token); if (ObjectUtils.isEmpty(reqToken)) { return false; } if(redisUtil.getExpire(UserConstants.PREFIX_USER_TOKEN+token) <1){ return false; } redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, token,UserConstants.TOKEN_EXPIRE_TIME); return true;
2.这种方式为免密登录,也就是说,登录一次后就不用再通过账号密码登录,思路就是在生成token时候,在生成一个refToken来刷新,比如说我的token设置的有效期为5分钟,refToken设置的为一周,那么在请求时候则判断token是否过期,如果已经过期 就判断refToken的时间有没有过期,没有过期则生成一个新的token给前端,同时重置这个refToken(看你自己),如果refToken已经过期则重新登录,需要注意的是这次生成的token并不存在redis中,而是将refToken存在redis。
// 生成token String token = JwtUtil.sign(userName,user.getId()); //刷新token,免密登陆 String refToken=UUID.randomUUID().toString().replaceAll("-",""); redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, refToken,UserConstants.TOKEN_EXPIRE_TIME); Map map=new HashMap(); map.put("token", token); map.put("refToken", refToken); return Result.success(map); //这里在拦截其中校验token,如果校验失败,则判断redis的refToken是否过期 if (!JwtUtil.verify(token)) { if(redisUtil.getExpire(UserConstants.PREFIX_USER_TOKEN+token)>=1){ HttpServletResponse httpServletResponse = (HttpServletResponse) response; String newRefToken=UUID.randomUUID().toString().replaceAll("-",""); Integer userId=Integer.parseInt(JwtUtil.getUserId(token)); User user=userService.selectOne(userId); String newToken=JwtUtil.sign(user.getUserName(),user.getId()); httpServletResponse.setHeader("newToken",newToken); httpServletResponse.setHeader("newRefToken",newRefToken); return true; }else{ return false; } }
3.贴一下我在postMan中的html" target="_blank">测试结果:
这里是登录后返回的token和refToken:
这里是登陆成功之后的显示:
这里是token过期后,refToken刷新的token:
这里是设定的refToken过期后在访问的显示:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍SpringBoot集成JWT实现token验证的流程,包括了SpringBoot集成JWT实现token验证的流程的使用技巧和注意事项,需要的朋友参考一下 JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk/jjwt 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递
本文向大家介绍springboot+jwt实现token登陆权限认证的实现,包括了springboot+jwt实现token登陆权限认证的实现的使用技巧和注意事项,需要的朋友参考一下 一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制
本文向大家介绍基于springboot集成hbase过程解析,包括了基于springboot集成hbase过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于springboot集成hbase过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 springboot-habse: https://github.com/spr
本文向大家介绍基于springboot实现整合shiro实现登录认证以及授权过程解析,包括了基于springboot实现整合shiro实现登录认证以及授权过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了基于springboot实现整合shiro实现登录认证以及授权过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.添加
本文向大家介绍基于JWT实现SSO单点登录流程图解,包括了基于JWT实现SSO单点登录流程图解的使用技巧和注意事项,需要的朋友参考一下 一、基于JWT实现SSO单点登录原理 1、什么是单点登录 所谓单点登录就是有多个应用部署在不同的服务器上,只需登录一次就可以互相访问不同服务器上的资源。 2、单点登录流程 当一个访问请求发给应用A,如果这个请求需要登录以后才能访问,那么应用A就
本文向大家介绍基于jquery实现ajax无刷新评论,包括了基于jquery实现ajax无刷新评论的使用技巧和注意事项,需要的朋友参考一下 jquery实现ajax无刷新评论需要用的技术:(本次试验用的是“jquery-1.4.2.js”版本的jquery) $.post("一般处理程序路径",{以字典的形式传递参数},function(data,status){``````}); jquery中
本文向大家介绍SpringBoot Shiro授权实现过程解析,包括了SpringBoot Shiro授权实现过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringBoot Shiro授权实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用Shiro过滤器实现授权 设置好授权拦截跳转的请求地址 再使用 fil
本文向大家介绍基于Python实现签到脚本过程解析,包括了基于Python实现签到脚本过程解析的使用技巧和注意事项,需要的朋友参考一下 无聊刷日剧,看到签到断了好久,简单写了个脚本,通过模拟抓包的方式实现 1、先登录到字幕组网站获取token 2、用获取到的token登录到人人活动页面获取cookie 3、用获取到的cookie进行签到 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家