1. 引入依赖
<!--jwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<!--阿里 FastJson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>
2. JWT工具类 写法
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.MalformedJwtException;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.SignatureException;
import io.jsonwebtoken.UnsupportedJwtException;
import java.security.Key;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
import javax.crypto.spec.SecretKeySpec;
public class AppJwtUtils {
/** 加解密的秘钥 */
private static final String SECRET_KEY = "xbkj01234567891012345678910123456789";
/** 过期时间 */
private static final long TOKEN_EXPIRE_MILLIS = 1702967296L;
/** 创建 token 方法 */
public static String createToken(Map<String, Object> claimMap) {
/** 获取系统当前时间 */
long currentTimeMillis = System.currentTimeMillis();
/** 获取 UUID */
String uuId = UUID.randomUUID().toString();
/** 当前系统时间格式化 */
Date currentTime = new Date(currentTimeMillis);
String compact = Jwts.builder()
.setId(uuId)
.setIssuedAt(currentTime) //设置有效时间
.setExpiration(new Date(currentTimeMillis + TOKEN_EXPIRE_MILLIS)) //设置过期时间
.addClaims(claimMap) //生成token的参数
.signWith(SignatureAlgorithm.HS256,generateKey()) //设置加密方式和秘钥
.compact();
return compact;
}
/** token验证方法 */
public static int verifyToken(String token) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(generateKey()).parseClaimsJws(token);
Date d1 = ((Claims)claimsJws.getBody()).getIssuedAt();
Date d2 = ((Claims)claimsJws.getBody()).getExpiration();
System.out.println("令牌签发时间:" + sdf.format(d1));
System.out.println("令牌过期时间:" + sdf.format(d2));
return 0;
} catch (ExpiredJwtException var5) {
var5.printStackTrace();
return 1;
} catch (UnsupportedJwtException var6) {
var6.printStackTrace();
return 2;
} catch (MalformedJwtException var7) {
var7.printStackTrace();
return 3;
} catch (SignatureException var8) {
var8.printStackTrace();
return 4;
} catch (IllegalArgumentException var9) {
var9.printStackTrace();
return 5;
}
}
/** 解析 token 的方法 */
public static Map<String, Object> parseToken(String token) {
return (Map) Jwts.parser().setSigningKey(generateKey()).parseClaimsJws(token).getBody();
}
/** 生成秘钥 key 的方法 */
public static Key generateKey() {
return new SecretKeySpec(SECRET_KEY.getBytes(), SignatureAlgorithm.HS256.getJcaName());
}
}