java jwt令牌的使用
依赖引入
com.auth0
java-jwt
3.18.1
我使用的是auth0的jwt包。
令牌的生成
public String generateJwtToken(Long userId, Integer level){
Algorithm algorithm = Algorithm.HMAC256(salt);
Date now = new Date();
String token = JWT.create()
.withIssuedAt(now)
.withClaim("userId", userId)
.withClaim("level", level)
.withExpiresAt(getExpiredDate(now))
.sign(algorithm);
return token;
}
令牌的生成如以上代码所示,首先指定算法(需要使用一个随机字符串作为salt),之后调用链中withIssuedAt()设置签发时间;withClaim()设置token中携带的参数,可以是用户名等信息;withExpiresAt()设置token到期的时间点。
令牌解密
public Map decodeToken(String jwtToken){
Algorithm algorithm = Algorithm.HMAC256(salt);
JWTVerifier jwtVerifier = JWT.require(algorithm).build();
try {
DecodedJWT decodedJWT = jwtVerifier.verify(jwtToken);
return decodedJWT.getClaims();
}catch (Exception e){
e.printStackTrace();
log.error("校验令牌失败");
throw new UnAuthenticatedException(10004);
}
}
【java jwt令牌的使用】解密时使用的算法与salt与加密保持一致,之后调用JWTVerifier的verify()方法解密得到DecodedJWT对象,它的getClaims()方法用于获得加密时设置的参数组成的Map。Map的key为名称,Claim类的asInt()、asLong()等方法用于将参数根据类型导出,类型注意保持与加密时一致。如果token不正确或到期verify()方法会抛出异常。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机