当前位置:网站首页>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
边栏推荐
- 数字IC设计中基本运算的粗略的延时估计
- 五分钟入门文本处理三剑客grep awk sed
- 【2022杭电多校5 1012题 Buy Figurines】STL的运用
- 结构体小结
- 简单理解 JS 事件循环
- 长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用
- 机器学习_02
- [Academic related] Tsinghua professor persuaded to quit his Ph.D.:I have seen too many doctoral students have mental breakdowns, mental imbalances, physical collapses, and nothing!...
- Win10 uwp use ScaleTransform magnify an element
- 括号匹配
猜你喜欢

遇到MapStruct后,再也不手写PO,DTO,VO对象之间的转换了

工龄10年的测试员从大厂“裸辞”后...

如何最简单、通俗地理解爬虫的Scrapy框架?

Five Minutes Introductory Text Processing Three Musketeers grep awk sed

【TypeScript】深入学习TypeScript枚举

Big capital has begun to flee the crypto space?

使用堡塔应用管理器配置laravel队列方法

【C语言】指针和数组的深入理解(第三期)

How to make good use of builder mode

LINQ to SQL (Group By/Having/Count/Sum/Min/Max/Avg操作符)
随机推荐
常用正则表达式[通俗易懂]
Zero-knowledge proof - zkSNARK proof system
【AGC】构建服务1-云函数示例
暴雨中的人
C语言基础[通俗易懂]
多商户商城系统功能拆解22讲-平台端分销商品
[TypeScript] In-depth study of TypeScript enumeration
web 应用开发最佳实践之一:避免大型、复杂的布局和布局抖动
括号匹配
拒绝服务攻击DDoS介绍与防范
二叉搜索树解决硬木问题
宝塔实测-搭建中小型民宿酒店管理源码
Oreo域名授权验证系统v1.0.6公益开源版本网站源码
工龄10年的测试员从大厂“裸辞”后...
如何用好建造者模式
该如何训练好深度学习模型?
jMeter Thread group 对应的 constant timer
vs Code runs a local web server
C语言之实现扫雷小游戏
MATLAB中readtimetable函数用法