使用Hutool包下的JWTUtil工具类来生成和解析JWT令牌

Hutool包是一个小而全的工具包,里边封装了对各种对象进行操作的工具类

最近在做jwt令牌校验的时候发现了hutool包也对jwt做了相应的工具类 ,昨天摸索了一下午也是简单使用了一下

	/**
	 *
	 * JWT令牌的生成
	 */
	@Test
	public void DateTim(){
		//获取当前时间
		DateTime now = DateTime.now();
		//获取十分钟之后的时间
		DateTime newTime = now.offsetNew(DateField.MINUTE, 10);
		//使用Map集合来存储载荷信息、有效期
		Map<String,Object> payload=new HashMap<>();
		//签发时间
		payload.put(JWTPayload.ISSUED_AT,now);
		//过期时间
		payload.put(JWTPayload.EXPIRES_AT,newTime);
		//生效时间
		payload.put(JWTPayload.NOT_BEFORE,now);
		payload.put("username","张三");
		payload.put("password","ayx654321");
		String token = JWTUtil.createToken(payload, "abc".getBytes());
		log.info(token);
	}

在生成JWt令牌时这里我没有指定签名算法,默认使用的HS256签名算法

@Test
	public void parseJwtTest(){
		//要解析jwt令牌的签名秘钥
		String key ="abc";
		//要解析的令牌
		String token ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzd29yZCI6ImF5eDY1NDMyMSIsIm5iZiI6MTcyMjE1OTM4OCwiZXhwIjoxNzIyMTU5OTg4LCJpYXQiOjE3MjIxNTkzODgsInVzZXJuYW1lIjoi5byg5LiJIn0.DmaxoH4nd2jnVfDuvtKF7NyPaHG16k1mR4peAFfFfnk";
		JWT jwt = JWTUtil.parseToken(token);
		//获取全部载荷信息
		JWTPayload payload = jwt.getPayload();
		payload.getClaimsJson().forEach((k,v)-> System.out.println(k+"--->"+v));

		//验证是否正确
		boolean verify = jwt.setKey(key.getBytes()).verify();
		System.out.println(verify);
		//验证是否过期
		boolean validate = jwt.validate(0);
		System.out.println(validate);
	}

、上面的jwt.setkey(key.getBytes()).verify()方法通过传入令牌的签名秘钥并对给定的令牌的签名秘钥进行一致性校验 

运行结果:

 由于我解析的令牌使用的是上面之前生成过的jwt令牌,已经过了有效期,所以载荷信息的时间毫秒值均为过期时间,令牌的有效期也为false

使用hutool生成jwt token,你需要在项目中引入hutool-all的依赖。具体的依赖配置如下所示: ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.13</version> </dependency> ``` 在登录接口中,如果账号密码校验成功,你可以使用用户id和用户类型创建jwt token,并将其设置为永不过期。然后,你可以更新登录日期,并将其作为一个值(B)存储在redis中,以便后续验证。在登录结果中,你可以返回一个json格式的响应,其中包含"result"为"success","token"为A的键值对。用户在接口请求header中携带token进行登录,后端可以通过拦截器解析token,获取userId和用户类型。如果解析失败,则返回一个json响应,表示Token验证不通过。如果解析成功,后端可以验证redis中的缓存key是否存在。如果不存在,则返回一个json响应,表示会话过期请重新登录。如果缓存key存在,则可以自动续7天的超时时间,以实现频繁登录用户的免登陆功能。在接口方法中,你可以直接获取登录用户的信息,将userId和用户类型放入request参数中。如果用户修改密码或退出登录,你可以废除access_tokens,即删除对应的缓存key。\[2\] 请注意,以上是一个大致的流程,具体实现可能会根据你的项目需求有所不同。 #### 引用[.reference_title] - *1* [利用hutool生成和验证JWT的示例](https://blog.csdn.net/qq125281823/article/details/120960181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [JWT生成token及过期和自动续期](https://blog.csdn.net/jq1223/article/details/114580020)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值