• 使用 io.jsonwebtoken 实现token的生成与解码


    通过 jsonwebtoken 能够方便的生成token和进行token相关解码,参考文档:https://github.com/jwtk/jjwt#base64 ,详细的操作流程如下所示

    导入io.jsonwebtoken依赖:

    <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
    </dependency>
    

    jwt的简单使用:

    生成token

    @Test
    public void testIoJsonWebToken() {
      String key = "myKey";
      HashMap<String, Object> map = new HashMap<>();
      map.put("name", "get");
      String jwt = Jwts.builder()
        .signWith(SignatureAlgorithm.HS256, key)
        .setClaims(map)
        .compact();
      System.out.println(jwt); // eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiZ2V0In0.RiKlMMNgv3XRDcZtxgukAEpOHv_Q9pQQjDPPuPa-Dw0
    }
    

    解析token,对生成的token进行解密操作

    @Test
    public void parseJsonWebToken() {
      String key = "myKey";
      Jws<Claims> jws = Jwts.parser()
        .setSigningKey(key)
     .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiZ2V0In0.RiKlMMNgv3XRDcZtxgukAEpOHv_Q9pQQjDPPuPa-Dw0");
      System.out.println(jws.getBody());
      System.out.println(jws.getBody().get("name"));
    }
    

    封装jwt工具类

    实体类:

    public class User implements Serializable {
        private String name;
        private Integer age;
        private String password;
    
        public User(String name, Integer age, String password) {
            this.name = name;
            this.age = age;
            this.password = password;
        }
        // get set 方法
    }
    

    工具类:

    import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.Jwts;
    import io.jsonwebtoken.SignatureAlgorithm;
    
    import java.lang.reflect.Field;
    import java.util.HashMap;
    import java.util.Map;
    
    public class JwtHelper {
        private static final String key = "keyxxx";
    
        public static String createJWT(Object obj) {
            Map<String, Object> map = new HashMap<>();
            Field[] fields = obj.getClass().getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                try {
                    map.put(field.getName(), field.get(obj));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            return Jwts.builder()
                    .signWith(SignatureAlgorithm.HS256, key)
                    .setClaims(map)
                    .compact();
        }
    
        public static Claims parseJWT(String token) {
            return Jwts.parser()
                    .setSigningKey(key)
                    .parseClaimsJws(token)
                    .getBody();
        }
    }
    
    资源分享: 腾讯云华为云
  • 相关阅读:
    sklearn KMeans聚类算法(总结)
    求素数的一个快速算法 Python 快速输出素数算法
    Java方法的多态
    Java static特性
    第一周-调用weka算法进行数据挖掘
    第一周 -神经网络算法与实现
    1【西北师大-2108Java】第一次作业成绩汇总
    第一周博客作业
    十一,专著研读(CART算法)
    十,专著研读(线性回归)
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/15753765.html
Copyright © 2020-2023  润新知