JWT主动校验Token是否过期

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源字节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值