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

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
生成token的一种方式是使用JWT(JSON Web Token)技术。JWT是一种开放标准,它定义了一种紧凑且自包含的方式来在各方之间安全地传输信息。下面是使用Java生成token的步骤: 1. 导入依赖 使用JWT需要导入以下依赖: ``` <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> ``` 2. 创建JWT ``` String secretKey = "yourSecretKey"; String shortToken = Jwts.builder() .setSubject("subject") .setExpiration(new Date(System.currentTimeMillis() + 60000)) .signWith(SignatureAlgorithm.HS512, secretKey.getBytes()) .compact(); ``` 其中,`setSubject`方法设置token主题,`setExpiration`方法设置token过期时间,`signWith`方法使用HS512算法对token进行签名,`compact`方法生成token字符串。 3. 解析JWT ``` Jws<Claims> jws = Jwts.parserBuilder() .setSigningKey(secretKey.getBytes()) .build() .parseClaimsJws(shortToken); String subject = jws.getBody().getSubject(); ``` 其中,`setSigningKey`方法设置签名密钥,`parseClaimsJws`方法解析token并返回Jws对象,`getBody`方法获取token的内容,`getSubject`方法获取token的主题。 以上就是使用Java生成token的步骤。需要注意的是,使用JWT生成token并不一定是短token,而是一种安全且可靠的token传输方式。如果要生成token,可以根据需要对生成token字符串进行截取等处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睆小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值