当前位置:网站首页>JWT主动校验Token是否过期
JWT主动校验Token是否过期
2022-08-04 21:00:00 【詹Sir(开源字节)】
JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP 协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个 request 请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁,就要再验证一次。所以为了保证系统安全,我们就需要验证用户否处于登录状态。
JWT 组成
JWT 由三部分组成:Header,Payload,Signature 三个部分组成,并且最后由.拼接而成。
JWT 校验原理
通过前面讲解的 jwt 生成规则,jwt 前两部分是对 header 以及 payload 的 base64 编码。 当服务器收到客户端的 token 后,解析前两部分得到 header 以及 payload,并使用 header 中的算法与服务端本地私有 secret 进行签名,判断与 jwt 中携带的签名是否一致。
主动校验是否过期
在一些表单提交的业务场景会去校验Token是否有效,如果此时token已过期,那么前端会提示用户重新登录。如开源字节租房小程序提交房源的场景就是如此。该操作模式会导致用户输入的数据丢失,造成用户体验很糟糕,因此在租房小程序中我们实现了主动校验token的功能,在我们打开表单的同时就去校验token,此时用户并没有输入任何数据。通过此方式改善了用户的体验。
/** * 验证令牌是否过期 */ public boolean isExpiration(String token) { try { Claims claims = parseToken(token); String userKey = getTokenKey(claims.get(Constants.LOGIN_USER_KEY).toString()); LoginUser loginUser = redisCache.getCacheObject(userKey); long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); if (expireTime - currentTime <= 0) { return true; } } catch (Exception e) { return true; } return false; } /** * 从令牌中获取数据声明 * * @param token 令牌 * @return 数据声明 */ private Claims parseToken(String token) { return Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); }
以上分享内容在开源字节低代码平台中可免费获取,前往围观
如若转载,请注明出处:开源字节 https://sourcebyte.cn/article/212.html
边栏推荐
猜你喜欢
随机推荐
【TypeScript】深入学习TypeScript枚举
jekyll 在博客添加流程图
ts集成和使用
ADB 安装 + 打驱动全教程
STP --- 生成树协议
run command for node
3、IO流之字节流和字符流
C#之app.config、exe.config和vshost.exe.config作用区别
xss课堂内容复现
How to make good use of builder mode
漫画 | 老板裁掉我两周后,又把我请回去,工资翻番!
uwp ScrollViewer content out of panel when set the long width
C语言之实现扫雷小游戏
无代码平台字段设置:基础设置入门教程
【学术相关】清华教授发文劝退读博:我见过太多博士生精神崩溃、心态失衡、身体垮掉、一事无成!...
Nuxt.js的优缺点和注意事项
vim clear last search highlighting
某男子因用本地虚拟机做压测,惨遭字节面试官当场嘲笑
深度解析:为什么跨链桥又双叒出事了?
【C语言】指针和数组的深入理解(第三期)