使用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

这种两种情况只是判断了令牌未被篡改的情况,为了防止这种情况,应将解析token的代码放入try-catch代码块中进行处理 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值