基于springboot+jwt实现刷新token过程解析
前⼀段时间讲过了springboot+jwt的整合,但是因为⼀些原因(个⼈⽐较懒)并没有更新关于token的刷新问题,今天跟别⼈闲聊,聊到了关于业务中token的刷新⽅式,所以在这⾥我把我知道的⼀些点记录⼀下,也希望能帮到⼀些有需要的朋友,同时也希望给我⼀些建议,话不多说,上代码!
1:这种⽅式为在线刷新,⽐⽅说设定的token有效期为30min,那么每次访问资源时,都会在中去判断⼀下token是否过期,如果没有过期就刷新token的时间为30min,反之则会重新登录,需要注意的是这种⽅式我是在登录以后就将token存在了redis
//登录⽅法中将token存在redis
String token = JwtUtil.sign(Id());
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 = Header(UserConstants.ACCESS_TOKEN);
if (Strings.isNullOrEmpty(token)) {
return false;
}
Object (UserConstants.PREFIX_USER_TOKEN+token);
if (ObjectUtils.isEmpty(reqToken)) {
return false;
}
Expire(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(Id());
//刷新token,免密登陆
String refToken=UUID.randomUUID().toString().replaceAll("-","");
redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, refToken,UserConstants.TOKEN_EXPIRE_TIME);
Map map=new HashMap();
springboot原理pdfmap.put("token", token);
map.put("refToken", refToken);
return Result.success(map);
//这⾥在拦截其中校验token,如果校验失败,则判断redis的refToken是否过期
if (!JwtUtil.verify(token)) {
Expire(UserConstants.PREFIX_USER_TOKEN+token)>=1){
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
String newRefToken=UUID.randomUUID().toString().replaceAll("-","");
Integer userId=Integer.UserId(token));
User user=userService.selectOne(userId);
String newToken=JwtUtil.UserName(),Id());
httpServletResponse.setHeader("newToken",newToken);
httpServletResponse.setHeader("newRefToken",newRefToken);
return true;
}else{
return false;
}
}
3.贴⼀下我在postMan中的测试结果:
这⾥是登录后返回的token和refToken:
这⾥是登陆成功之后的显⽰:
这⾥是token过期后,refToken刷新的token:
这⾥是设定的refToken过期后在访问的显⽰:
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论