解析jwt令牌
当服务端生成 token 后发给客户端,客户端在下次向服务端发送请求时需要携带这个token (这就好像是拿着一张门票一 样),那服务端接到这个token 应该解析出token中的信息(例如用户名), 根据这些信息 查询数据库返回相应的结果。
在 测试类添加一个方法 parserJwt 来解析jwt令牌中信息
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class TestJwt {
public static void main(String[] args) {
String token=createJwt();
System.out.println("生成的令牌"+token);
parserJwt(token);
}
// 生成jwt令牌(token)
public static String createJwt(){
// 获取当前事件(毫秒数)
long now=System.currentTimeMillis();
// 过期事件10s后
long exp=now+1000*10;
JwtBuilder builder= Jwts.builder();
builder.setId("1111")//用户id
.setSubject("admin") //主题:用户名
.setIssuedAt(new Date()) //签发事件
.signWith(SignatureAlgorithm.HS256,"mengxuegu")//签名密钥
.setExpiration(new Date(exp)); //设置有效期
return builder.compact();//开始生成jwt令牌
}
// 解析令牌
public static void parserJwt(String token){
Claims claims=Jwts.parser().setSigningKey("mengxuegu").
parseClaimsJws(token)
.getBody();
System.out.println("id:"+claims.getId());
System.out.println("subject:"+claims.getSubject());
}
}
如果将 token或签名秘钥篡改一下,会发现运行时就会报错,所以解析token也就是验证 token
检测令牌是否过期
测试:先生成一个token ,然后等待10秒后再去解析它
parserJwt("你自己生成的令牌"); //这个方法是自己定义的
10s后:报错 Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-04-26T11:31:00+0800. Current time: 2022-04-26T11:32:35+0800