Java工具类-JWT工具类
都依凡
撰写于 2023年 05月 12 日

使用方式

1. 生成 JWT令牌

        // 配置要存储的数据
        HashMap<String, Object> map = new HashMap<>();
        map.put("id",1);
        map.put("name","LuckyDu");

        // 使用默认配置生成JWT令牌
        String jwtToken = JWTUtils.getJwtToken(map);
        System.out.println("jwtToken = " + jwtToken);

        // 自定义配置生成JWT令牌
        SignatureAlgorithm hs256 = SignatureAlgorithm.HS256;// 设置签名算法
        String signKey = "luckyDu"; // 加盐 不能过短,过短会报错,至少4个字符,具体版本不同可能不一样
        Date outTime = new Date(System.currentTimeMillis() + 3600 * 1000);
        String jwtToken1 = JWTUtils.getJwtToken(hs256, signKey, map, outTime);
        System.out.println("jwtToken1 = " + jwtToken1);

2. 解析 JWT令牌

        // 生成的JWT令牌
        String jwtToken = "【这里填写您生成的jwt令牌】";
        // 使用默认配置解析
        Jws<Claims> claimsJws = JWTUtils.parseJwtToken(jwtToken);
        System.out.println("claimsJws = " + claimsJws);

        // 使用自定义配置解析
        String signKey = "luckyDu"; // 自定义的生成jwt令牌的 盐值
        Jws<Claims> claimsJws1 = JWTUtils.parseJwtToken(jwtToken, signKey);
        System.out.println("claimsJws1 = " + claimsJws1);

3. JWT工具类

import io.jsonwebtoken.*;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;

/**
 * JWT 生成工具类
 */
public class JWTUtils implements Serializable {
    /**
     * 设置盐值
     */
    private static final String signKey = "LuckyDu";

    /**
     * 设置Token过期时间 一小时
     */
    private static final Date outTime = new Date(System.currentTimeMillis() + 3600 * 1000);

    /**
     * 设置加密算法 HS256
     */
    private static final SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS256;


    /**
     * 生成 JWT Token
     * @param signatureAlgorithm 签名算法
     * @param signKey 自定义盐值
     * @param map 数据
     * @param outTime 过期时间
     * @return
     */
    public static String getJwtToken(SignatureAlgorithm signatureAlgorithm,String signKey,Map<String,Object> map,Date outTime){
        String compact = Jwts.builder()
                .signWith(signatureAlgorithm, signKey) // 设置JWT头部信息,加密算法和盐值
                .setClaims(map) // 设置JWT的荷载信息,需要一个Map集合存储
                .setExpiration(outTime) // 设置过期时间,设置的是时间点
                .compact(); // 调用生成令牌
        return compact;
    }

    /**
     * 使用默认配置生成JWT token
     * @param map 数据 Map
     * @return
     */
    public static String getJwtToken(Map<String,Object> map){
        String jwtToken = getJwtToken(SIGNATURE_ALGORITHM, signKey, map, outTime);
        return jwtToken;
    }

    /**
     * 解析 JWT token
     * @param compact 令牌字符串
     * @param signKey 生成时候的盐值
     * @return
     * @throws ExpiredJwtException JWT令牌过期抛出异常
     * @throws UnsupportedJwtException jwt令牌不支持的异常
     * @throws MalformedJwtException 头部信息出错抛出异常
     * @throws SignatureException 荷载信息出错抛出异常 签名信息出错抛出异常
     * @throws IllegalArgumentException 传入参数异常
     */
    public static Jws<Claims> parseJwtToken(String compact ,String signKey) throws ExpiredJwtException, UnsupportedJwtException, MalformedJwtException, SignatureException, IllegalArgumentException{
        Jws<Claims> claimsJws = Jwts.parser() // 解析JWT令牌方法
                .setSigningKey(signKey) // 设置盐值
                .parseClaimsJws(compact);// 传入生成的令牌
        return claimsJws;
    }

    /**
     *
     * @param compact 令牌字符串
     * @return
     * @throws ExpiredJwtException
     * @throws UnsupportedJwtException
     * @throws MalformedJwtException
     * @throws SignatureException
     * @throws IllegalArgumentException
     */
    public static Jws<Claims> parseJwtToken(String compact) throws ExpiredJwtException, UnsupportedJwtException, MalformedJwtException, SignatureException, IllegalArgumentException{
        Jws<Claims> claimsJws = parseJwtToken(compact,signKey);// 传入生成的令牌
        return claimsJws;
    }

}

Java工具类-JWT工具类

使用方式

1. 生成 JWT令牌

        // 配置要存储的数据
        HashMap<String, Object> map = new HashMap<>();
        map.put("id",1);
        map.put("name","LuckyDu");

        // 使用默认配置生成JWT令牌
        String jwtToken = JWTUtils.getJwtToken(map);
        System.out.println("jwtToken = " + jwtToken);

        // 自定义配置生成JWT令牌
        SignatureAlgorithm hs256 = SignatureAlgorithm.HS256;// 设置签名算法
        String signKey = "luckyDu"; // 加盐 不能过短,过短会报错,至少4个字符,具体版本不同可能不一样
        Date outTime = new Date(System.currentTimeMillis() + 3600 * 1000);
        String jwtToken1 = JWTUtils.getJwtToken(hs256, signKey, map, outTime);
        System.out.println("jwtToken1 = " + jwtToken1);

2. 解析 JWT令牌

        // 生成的JWT令牌
        String jwtToken = "【这里填写您生成的jwt令牌】";
        // 使用默认配置解析
        Jws<Claims> claimsJws = JWTUtils.parseJwtToken(jwtToken);
        System.out.println("claimsJws = " + claimsJws);

        // 使用自定义配置解析
        String signKey = "luckyDu"; // 自定义的生成jwt令牌的 盐值
        Jws<Claims> claimsJws1 = JWTUtils.parseJwtToken(jwtToken, signKey);
        System.out.println("claimsJws1 = " + claimsJws1);

3. JWT工具类

import io.jsonwebtoken.*;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;

/**
 * JWT 生成工具类
 */
public class JWTUtils implements Serializable {
    /**
     * 设置盐值
     */
    private static final String signKey = "LuckyDu";

    /**
     * 设置Token过期时间 一小时
     */
    private static final Date outTime = new Date(System.currentTimeMillis() + 3600 * 1000);

    /**
     * 设置加密算法 HS256
     */
    private static final SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS256;


    /**
     * 生成 JWT Token
     * @param signatureAlgorithm 签名算法
     * @param signKey 自定义盐值
     * @param map 数据
     * @param outTime 过期时间
     * @return
     */
    public static String getJwtToken(SignatureAlgorithm signatureAlgorithm,String signKey,Map<String,Object> map,Date outTime){
        String compact = Jwts.builder()
                .signWith(signatureAlgorithm, signKey) // 设置JWT头部信息,加密算法和盐值
                .setClaims(map) // 设置JWT的荷载信息,需要一个Map集合存储
                .setExpiration(outTime) // 设置过期时间,设置的是时间点
                .compact(); // 调用生成令牌
        return compact;
    }

    /**
     * 使用默认配置生成JWT token
     * @param map 数据 Map
     * @return
     */
    public static String getJwtToken(Map<String,Object> map){
        String jwtToken = getJwtToken(SIGNATURE_ALGORITHM, signKey, map, outTime);
        return jwtToken;
    }

    /**
     * 解析 JWT token
     * @param compact 令牌字符串
     * @param signKey 生成时候的盐值
     * @return
     * @throws ExpiredJwtException JWT令牌过期抛出异常
     * @throws UnsupportedJwtException jwt令牌不支持的异常
     * @throws MalformedJwtException 头部信息出错抛出异常
     * @throws SignatureException 荷载信息出错抛出异常 签名信息出错抛出异常
     * @throws IllegalArgumentException 传入参数异常
     */
    public static Jws<Claims> parseJwtToken(String compact ,String signKey) throws ExpiredJwtException, UnsupportedJwtException, MalformedJwtException, SignatureException, IllegalArgumentException{
        Jws<Claims> claimsJws = Jwts.parser() // 解析JWT令牌方法
                .setSigningKey(signKey) // 设置盐值
                .parseClaimsJws(compact);// 传入生成的令牌
        return claimsJws;
    }

    /**
     *
     * @param compact 令牌字符串
     * @return
     * @throws ExpiredJwtException
     * @throws UnsupportedJwtException
     * @throws MalformedJwtException
     * @throws SignatureException
     * @throws IllegalArgumentException
     */
    public static Jws<Claims> parseJwtToken(String compact) throws ExpiredJwtException, UnsupportedJwtException, MalformedJwtException, SignatureException, IllegalArgumentException{
        Jws<Claims> claimsJws = parseJwtToken(compact,signKey);// 传入生成的令牌
        return claimsJws;
    }

}

版权属于:都依凡 所有,采用《知识共享署名许可协议》进行许可,转载请注明文章来源。

本文链接: http://blog.anlucky.cn/index.php/programming/java/136

赞 (4)

评论区(暂无评论)

啊哦,评论功能已关闭~