- 依赖
<!-- 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)。
该类包含以下方法:
-
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令牌。 -
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;
}
}
}