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异常

 

posted @ 2023-02-21 11:03  向大海  阅读(106)  评论(0编辑  收藏  举报