JWT工具类

  • 依赖
<!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
 <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
 </dependency>

  • 工具类

这是一个名为JwtUtil的Java类,用于生成和解析JSON Web Token(JWT)。

该类包含以下方法:

  1. generateToken(String subject, String claimKey, Object claimValue, Long expire): 生成一个JWT令牌。该方法接受四个参数:

    • subject:表示JWT的主题,表示令牌所有者。通常是用户的唯一标识符。
    • claimKey:表示要添加到JWT中的自定义声明的键。
    • claimValue:表示要添加到JWT中的自定义声明的值。
    • key和value表示存入token中的内容。存于空荷载,一般是Map结构
    • expire:表示JWT的过期时间,以毫秒为单位。

    该方法使用Jwts.builder()创建一个JWT构建器,并设置主题、自定义声明和过期时间。然后,使用指定的密钥对JWT进行签名,并将其压缩为字符串形式。最后,返回生成的JWT令牌。

  2. analyzeToken(String token, String claimKey): 解析一个JWT令牌。该方法接受两个参数:

    • token:表示要解析的JWT令牌。
    • claimKey:表示要从JWT中提取的自定义声明的键。

    该方法首先检查传入的令牌是否为空。如果为空,则返回null。否则,使用Jwts.parser()创建一个JWT解析器,并设置签名密钥。然后,解析传入的令牌,并获取其主体部分。最后,从主体中提取指定的自定义声明值,并返回。

这个类的作用是提供生成和解析JWT的功能,以便在应用程序中实现身份验证和授权等安全功能。

package com.wu.pan.framework.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;

/**
 * Jwt工具类
 */
public class JwtUtil {

    public static final Long TWO_LONG = 2L;

    /**
     * 秘钥
     */
    private final static String JWT_PRIVATE_KEY = "0CB16040A41140E48F2F93A7BE222C46";

    /**
     * 刷新时间
     */
    private final static String RENEWAL_TIME = "RENEWAL_TIME";

    /**
     * 生成token
     *
     * @param subject 令牌所有者
     *
     * @param claimKey   key
     * @param claimValue 值
     *  key和value存于空荷载claim。
     * @param expire 过期时间
     * @return
     */
    public static String generateToken(String subject, String claimKey, Object claimValue, Long expire) {
        String token = Jwts.builder()
                .setSubject(subject)
                .claim(claimKey, claimValue)
                .claim(RENEWAL_TIME, new Date(System.currentTimeMillis() + expire / TWO_LONG))
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .signWith(SignatureAlgorithm.HS256, JWT_PRIVATE_KEY)  //加密算法和私钥 (这一步也就是所谓的数字签名跟cookie加密类似)
                .compact();
        return token;
    }

    /**
     * 解析token
     *
     * @param token
     * @return
     */
    public static Object analyzeToken(String token, String claimKey) {
        if (StringUtils.isBlank(token)) {
            return null;
        }
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(JWT_PRIVATE_KEY)
                    .parseClaimsJws(token)
                    .getBody();
            return claims.get(claimKey);
        } catch (Exception e) {
            return null;
        }
    }

}



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值