jwt应该如何使用呢?
下面来写一个最简单的jwt的使用demo
1. 引入依赖包:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
2. 加密解密方法
public static void main(String[] args) {
// 过期时间
final Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND, 1000);
// 以abc为密钥进行hmac256方法加密,保存 a,b两个属性
final String token = JWT.create().withHeader(new HashMap<>())
.withClaim("a", "ccc")
.withClaim("b", JSONObject.toJSON(Arrays.asList("a", "b", "c")).toString())
.withExpiresAt(instance.getTime())
.sign(Algorithm.HMAC256("abc"));
System.out.println("token = " + token);
// 解密
JWTVerifier build = JWT.require(Algorithm.HMAC256("abc")).build();
final DecodedJWT verify = build.verify(token);
// 取出a
final Claim a = verify.getClaim("a");
System.out.println("a = " + a);
System.out.println("a.asString() = " + a.asString());
// 取出b
final Claim b = verify.getClaim("b");
System.out.println("b = " + b);
System.out.println("b.asArray(List.class) = " + b.asString());
// 取出过期时间
final Date expiresAt = verify.getExpiresAt();
System.out.println("expiresAt = " + expiresAt.toLocaleString());
}
在生产环境中,一般jwt会保存用户的名字和角色权限等信息。可以将token 写到cookie里,每次前端访问后台时,可以在拦截器或者过滤器取到token, 然后解密,先判断是否过期,过期就抛异常阻止其访问。然后取出信息保存到threadLocal里,方便以后调用这些信息,当后台访问完成后,从thredLocal删除此用户信息。