前一段时间讲过了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过期后在访问的显示:

参考链接:https://zhuanlan.zhihu.com/p/57608281

jwt刷新token的更多相关文章

  1. ASP.NET Core Web Api之JWT刷新Token(三)

    前言 如题,本节我们进入JWT最后一节内容,JWT本质上就是从身份认证服务器获取访问令牌,继而对于用户后续可访问受保护资源,但是关键问题是:访问令牌的生命周期到底设置成多久呢?见过一些使用JWT的童鞋 ...

  2. SpringSecurity+Oauth2+Jwt实现toekn认证和刷新token

    简单描述:最近在处理鉴权这一块的东西,需求就是用户登录需要获取token,然后携带token访问接口,token认证成功接口才能返回正确的数据,如果访问接口时候token过期,就采用刷新token刷新 ...

  3. SpringBoot + SpringSecurity + Mybatis-Plus + JWT + Redis 实现分布式系统认证和授权(刷新Token和Token黑名单)

    1. 前提   本文在基于SpringBoot整合SpringSecurity实现JWT的前提中添加刷新Token以及添加Token黑名单.在浏览之前,请查看博客:   SpringBoot + Sp ...

  4. ASP.NET Core 3.1使用JWT认证Token授权 以及刷新Token

    传统Session所暴露的问题 Session: 用户每次在计算机身份认证之后,在服务器内存中会存放一个session,在客户端会保存一个cookie,以便在下次用户请求时进行身份核验.但是这样就暴露 ...

  5. JWT生成token及过期处理方案

    业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...

  6. jwt的token如何使用

    JWT简介: JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式).它是在Web环境下 ...

  7. 前后端分离中的无痛刷新token机制

    今天我们来说一说前后端分离中的无痛刷新token机制 博主先来分享一波福利,最近挖到的宝藏,刚开始学Java的同学看 https://www.bilibili.com/video/BV1Rx41187 ...

  8. 使用 JWT 生成 Token 代码示例

    JSON Web Token,简称 JWT, 是一个开放的标准(RFC 7519),它定义了以一种紧凑的.自包含的 JSON 对象在各方之间安全传输信息的方式.该信息含有数字签名,可以被验证和信任. ...

  9. flask刷新token

    我们在做前后端分离的项目中,最常用的都是使用token认证. 登录后将用户信息,过期时间以及私钥一起加密生成token,但是比较头疼的就是token过期刷新的问题,因为用户在登录后,如果在使用过程中, ...

  10. 十二、存token获取token刷新token发送header头

    //测试token //获取token function setToken(data){ var storage = window.localStorage; if(!storage){ alert( ...

随机推荐

  1. 数值分析之数值积分 4.X

    求积公式 \[\int_{a}^{b} f(x) \mathrm{d} x \approx \sum_{k=0}^{n} A_{k} f\left(x_{k}\right) \] \(A_k\) 为求 ...

  2. PCIe卡设计资料保存:536-基于ZU7EV的FMC 通用PCIe卡

    基于ZU7EV的FMC 通用PCIe卡   一.板卡简介 基于3U PXIe的ZU11EG/ZU7EG/ZU7EV的通用 ,实现FMC的数据接口和主控计算,广泛应用于工业控制,检测,视觉处理.支持工业 ...

  3. jmeter进行websocket 通信

    最近项目弄了基于websocket的通信接口,所以需要做一个websocket的接口压测. jmeter当前自带的插件无法进行jmeter接口的通信,所以 本人是下载的一套jar包插件,进行的安装 1 ...

  4. vue element 日期范围选择器限制:只能选今天之前的时间 || 只能选今天之后的时间 || 选取今天往后三天内

    举例:只能选今天或者今天之后的时间(如下图) <el-date-picker clearable v-model="form.limitTime" type="da ...

  5. vue2/vue3+eslint文件格式化

    vue+javascript 1.设置vscode保存时格式化文件 2.打开settings.json 3.设置settings.json文件 { "editor.codeActionsOn ...

  6. 关于elementui 验证问题 验证某个值大于另外一个值

    elementui ui表单验证区间 <el-form ref="ruleForm" :model="ruleForm" :rules="rul ...

  7. Linux-jar操作脚本

    service.sh 使用说明: ./service.sh start ./service.sh stop #!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME= ...

  8. Android 切换wifi小记

    我手机是Android 7.1的魅族.相关网络权限注册之后,还有一个特别的权限就是<uses-permission android:name="android.permission.A ...

  9. XMind8破解,详细版(亲测)

    废话不多说,直接上料: 一.资源 百度网盘XMind8: 链接:https://pan.baidu.com/s/1h2DXkni4-POEpHyBqLxjwA 提取码:kqgy 破解补丁: 链接:ht ...

  10. 哲讯科技SAP医疗器械行业ERP解决方案

    哲讯科技SAP医疗器械行业ERP解决方案主要体现在以预测为指导,计划为执行的管理理念,完全做到实时的全过程的质量管理和质量跟踪.并且通过灵活的质量管理模块大大降低因实施GMP管理给企业带来的成本压力. ...