详解JWT身份验证机制及其流程第五部分:实战应用JWT
最编程
2024-07-28 11:29:35
...
1,创建项目,导入依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
2,生成Token
@Test
void contextLoads() {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.SECOND,90); //设置过期时间
//生成令牌
String token = JWT.create()
.withClaim("username", "张三")//设置自定义用户名
.withClaim("userid", 1)//设置自定义id
.withExpiresAt(instance.getTime())//设置过期时间
.sign(Algorithm.HMAC256("token!Q2W#E$RW"));//设置签名 保密 复杂
//输出令牌
System.out.println(token);
}
生成结果
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MDQ4ODUxNjQsInVzZXJpZCI6MSwidXNlcm5hbWUiOiLlvKDkuIkifQ.cu0hLhxS0ID6zGqfNHxSt0WJZL-3AqNPzt2ZB5ebKPQ
3,根据令牌解析数据
@Test
void getToken(){
//创建验证对象
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("token!Q2W#E$RW")).build();
DecodedJWT decodedJWT = jwtVerifier.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MDQ4ODU1NzAsInVzZXJJZCI6MSwidXNlcm5hbWUiOiLlvKDkuIkifQ.s4YAv6EWqZQA4eO2uTwJkAoR45AZUOGMDskjvzoaW-s");
System.out.println("用户名:"+decodedJWT.getClaim("username").asString());
System.out.println("用户Id:"+decodedJWT.getClaim("userId").asInt());
System.out.println("过期时间:"+decodedJWT.getExpiresAt());
}
获取结果
用户名:张三
用户Id:1
过期时间:Mon Nov 09 09:32:50 CST 2020
4,常见异常信息
- SignatureVerificationException:签名不一致异常
- TokenExpiredException:令牌过期异常
- AlgorithmMissmatchException:算法不匹配异常
- InvalidClaimException:失效的payload异常