JWT生成、解析token

目录

  • 1. 导入JWT相关依赖
  • 2. JWT生成token
  • 3. JWT解析token
  • 4. 测试结果
  • 5. JWT加密、解密工具类

1. 导入JWT相关依赖


      <dependency>
        <groupId>io.jsonwebtokengroupId>
        <artifactId>jjwt-apiartifactId>
        <version>0.10.2version>
      dependency>

      <dependency>
        <groupId>io.jsonwebtokengroupId>
        <artifactId>jjwt-implartifactId>
        <version>0.10.2version>
      dependency>

      <dependency>
        <groupId>io.jsonwebtokengroupId>
        <artifactId>jjwt-jacksonartifactId>
        <version>0.10.2version>
      dependency>

2. JWT生成token

JWT生成、解析token_第1张图片

    /**
    * 获取JWT令牌
    * @return
    */
    public static String getToken(String key){
        Map headers = new HashMap();
        //设置签名算法
        headers.put("alg", "HS256");
        //设置令牌类型
        headers.put("typ", "JWT");

        Map<String, Object> claims = new HashMap<>();
        //设置令牌主题
        claims.put("sub", "1234567890");
        //设置令牌其他信息
        claims.put("name", "John Doe");
        claims.put("admin", true);

        //生成令牌
        String jwt = Jwts.builder()
        //设置头信息
        .setHeaderParams(headers)
        //设置负载信息
        .setClaims(claims)
        //使用HS256算法和密钥对JWT进行签名
        .signWith(SignatureAlgorithm.HS256,key)
        //将之前设置的头部信息、负载信息和签名信息组合成一个完整的JWT,并以字符串形式返回
        .compact();
        System.out.println(jwt);
        return jwt;
        }

3. JWT解析token

    /**
     * 解析JWT令牌
     * @param token
     * @param key
     */
    public static void parseToken(String token,String key){
        try{
            System.out.println("开始解析令牌...");
            Claims claims = Jwts.parser()//创建一个解析器
                    .setSigningKey(key)//设置验证签名的密钥
                    .parseClaimsJws(token)//传入需要进行解析的token并解析
                    .getBody();//从Jws对象中获取负载信息
            System.out.println(claims);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

4. 测试结果

    public static void main(String[] args) {
        String key = "3f2e1d4c5b6a79808f7e6d5c4b3a29181716151413121110";
        String token = getToken(key);
        parseToken(token,key);
    }

      输出结果:

JWT生成、解析token_第2张图片

5. JWT加密、解密工具类

/**
 * 提供Jwt工具类
 * 提供Token生成和验证方法
 * @author Huan
 */
@Component //托管spring容器
public class JwtUtil {
    // 密钥
    private static final String key = "3f2e1d4c5b6a79808f7e6d5c4b3a29181716151413121110";

    /**
     * 生成JWT令牌
     * @param payload
     * @return
     */
    public String getToken(Map payload){
        //设置头部信息
        Map headers = new HashMap();
        //设置签名算法
        headers.put("alg", "HS256");
        //设置令牌类型
        headers.put("typ", "JWT");

        //生成令牌
        String jwt = Jwts.builder()
                //设置头信息
                .setHeaderParams(headers)
                //设置负载信息
                .setClaims(payload)
                //使用HS256算法和密钥对JWT进行签名
                .signWith(SignatureAlgorithm.HS256,key)
                //将之前设置的头部信息、负载信息和签名信息组合成一个完整的JWT,并以字符串形式返回
                .compact();
        System.out.println(jwt);
        return jwt;
    }

    /**
     * 解析JWT令牌
     * @param token
     * @return
     */
    public Claims parseToken(String token){
        try{
            System.out.println("开始解析令牌...");
            Claims claims = Jwts.parser()//创建一个解析器
                    .setSigningKey(key)//设置验证签名的密钥
                    .parseClaimsJws(token)//传入需要进行解析的token并解析
                    .getBody();//从Jws对象中获取负载信息
            System.out.println(claims);
            return claims;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}

链接:

JWT官方地址: https://jwt.io/

JWT官方文档: https://github.com/jwtk/jjwt

JWT官方文档快速开始: https://github.com/jwtk/jjwt?tab=readme-ov-file#quickstart

你可能感兴趣的:(java,android,开发语言)