Springboot整合JWT测试篇(一)
一、pom文件中引入依赖
<!--引入jwt--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> </dependency>
二、测试生成token值
// 测试生成token代码 @Test void createToken() { Calendar instance = Calendar.getInstance(); // 设置过期时间(这里是100秒) instance.add(Calendar.SECOND, 100); //生成令牌 String token = JWT.create() //负载:设置自定义用户名 .withClaim("username", "张三") //设置过期时间 .withExpiresAt(instance.getTime()) //签名:设置签名(加盐) 保密 复杂 .sign(Algorithm.HMAC256("tokenXiaoGao")); //输出令牌 System.out.println(token); }
结果如下:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NzY5NDc4MzYsInVzZXJuYW1lIjoi5byg5LiJIn0.eW2fjMBsv2uOqqsDeHjlJUnu-2GAtw-QVxroyNc6Tj8
三、解析token值
// 解码token @Test void unlockToken(){ //1.验证签名 JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("tokenXiaoGao")).build(); //2.解析token DecodedJWT decodedJWT = jwtVerifier.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NzY5NDc4MzYsInVzZXJuYW1lIjoi5byg5LiJIn0.eW2fjMBsv2uOqqsDeHjlJUnu-2GAtw-QVxroyNc6Tj8"); System.out.println("用户名: " + decodedJWT.getClaim("username").asString()); // 存的是时候是什么类型,取得时候就是什么类型,否则取不到值。 System.out.println("过期时间: "+decodedJWT.getExpiresAt()); }
结果如下:
用户名: 张三
过期时间: Tue Feb 21 10:50:36 CST 2023
四、常见异常
SignatureVerificationException: 签名不一致异常
TokenExpiredException: 令牌过期异常
AlgorithmMismatchException: 算法不匹配异常
InvalidClaimException: 失效的payload异常