欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

基于springboot+jwt实现刷新token过程解析

时间:2021-08-24 08:47:39|栏目:JAVA代码|点击:

前一段时间讲过了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中的测试结果:

这里是登录后返回的token和refToken:

这里是登陆成功之后的显示:

这里是token过期后,refToken刷新的token:

这里是设定的refToken过期后在访问的显示:

上一篇:Java异常日志堆栈丢失的原因与排查

栏    目:JAVA代码

下一篇:IntelliJ IDEA 安装及初次使用图文教程(2020.3.2社区版)

本文标题:基于springboot+jwt实现刷新token过程解析

本文地址:http://www.codeinn.net/misctech/169548.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有