JWT生成、解析token

1. 导入JWT相关依赖

<!--      jwt认证模块-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-api</artifactId>
        <version>0.10.2</version>
      </dependency>
<!--      jwt api impl实现-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-impl</artifactId>
        <version>0.10.2</version>
      </dependency>
<!--      jwt json-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-jackson</artifactId>
        <version>0.10.2</version>
      </dependency>

2. JWT生成token

在这里插入图片描述

    /**
    * 获取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<Claims>对象中获取负载信息
            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);
    }

      输出结果:

在这里插入图片描述

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<Claims>对象中获取负载信息
            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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睆小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值