欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

详解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());
   }

获取结果

用户名:张三
用户Id1
过期时间:Mon Nov 09 09:32:50 CST 2020

4,常见异常信息

  • SignatureVerificationException:签名不一致异常
  • TokenExpiredException:令牌过期异常
  • AlgorithmMissmatchException:算法不匹配异常
  • InvalidClaimException:失效的payload异常