[update] JwtUtil 升级

This commit is contained in:
its 2024-04-07 17:30:27 +08:00
parent 2031a3aadf
commit 8e8f390b5d

View File

@ -1,10 +1,12 @@
package com.yexuejc.base.util; package com.yexuejc.base.util;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import javax.crypto.SecretKey;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
/** /**
* jwt工具类 * jwt工具类
@ -34,7 +36,7 @@ public class JwtUtil {
* *
* @param key 加密key 默认h%OG8Y3WgA5AN7&6Ke7I#C1XvneW0N8a * @param key 加密key 默认h%OG8Y3WgA5AN7&6Ke7I#C1XvneW0N8a
* @param type 加密类型默认JWT * @param type 加密类型默认JWT
* @param iss token发行商: 默认yexuejc.com * @param iss token发行商: 默认yexuejc.top
* @return * @return
*/ */
public static JwtUtil config(String key, String type, String iss) { public static JwtUtil config(String key, String type, String iss) {
@ -60,7 +62,7 @@ public class JwtUtil {
/** /**
* token发行商 * token发行商
*/ */
private String JWT_CLAIMS_ISS = "yexuejc.com"; private String JWT_CLAIMS_ISS = "yexuejc.top";
/** /**
* 加密内容生成token * 加密内容生成token
@ -76,22 +78,22 @@ public class JwtUtil {
subject = JsonUtil.obj2Json(subjectObj); subject = JsonUtil.obj2Json(subjectObj);
} }
Date now = new Date(); Date now = new Date();
String token = Jwts.builder() return Jwts.builder()
// 设置token的唯一标识IDclaims.jti // 设置token的唯一标识IDclaims.jti
.setId(StrUtil.genUUID()) .id(StrUtil.genUUID())
// 设置token类型header.typ // 设置token类型header.typ
.setHeaderParam("typ", JWT_HEADER_TYP) .header().add("typ", JWT_HEADER_TYP)
.and()
// 设置token发行时间为当前时间claims.iat // 设置token发行时间为当前时间claims.iat
.setIssuedAt(now) .issuedAt(now)
// 设置token发行商/发行者claims.iss // 设置token发行商/发行者claims.iss
.setIssuer(JWT_CLAIMS_ISS) .issuer(JWT_CLAIMS_ISS)
// 设置token用户定义主体claims.sub // 设置token用户定义主体claims.sub
.setSubject(subject) .subject(subject)
// 设置签名算法和KEYsignature // 设置算法签名,(密钥加密算法)
.signWith(SignatureAlgorithm.HS512, JWT_SIGNATURE_KEY) .signWith(getSecretKey(), Jwts.SIG.HS512)
// 生成token // 生成token
.compact(); .compact();
return token;
} }
/** /**
@ -112,18 +114,8 @@ public class JwtUtil {
* @return * @return
*/ */
public <T> T parse(String token, Class<T> cls) { public <T> T parse(String token, Class<T> cls) {
String subject = null; return JsonUtil.json2Obj(parseStr(token), cls);
try {
subject = Jwts.parser().setSigningKey(JWT_SIGNATURE_KEY).parseClaimsJws(token).getBody().getSubject();
} catch (Exception e) {
e.printStackTrace();
} }
if (subject == null) {
return null;
}
return JsonUtil.json2Obj(subject, cls);
}
/** /**
* 解密token为字符串 * 解密token为字符串
* *
@ -131,12 +123,11 @@ public class JwtUtil {
* @return * @return
*/ */
public String parseStr(String token) { public String parseStr(String token) {
String subject = null; return Jwts.parser().verifyWith(getSecretKey()).build().parseSignedClaims(token).getPayload().getSubject();
try {
subject = Jwts.parser().setSigningKey(JWT_SIGNATURE_KEY).parseClaimsJws(token).getBody().getSubject();
} catch (Exception e) {
e.printStackTrace();
} }
return subject;
private SecretKey getSecretKey() {
byte[] bytes = Decoders.BASE64.decode(JWT_SIGNATURE_KEY);
return Keys.hmacShaKeyFor(bytes);
} }
} }