import io.jsonwebtoken.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
/**
* @Description:
* @Author: zhanghua
* @DateTime: Created in 2022/12/12 1:22 PM 星期一
*/
public class JwtUtils {
/**
* key(按照签名算法的字节长度设置key)
*/
private final static String SECRET_KEY = "0123456789_0123456789_0123456789";
/**
* 过期时间(毫秒单位)
*/
private final static long TOKEN_EXPIRE_MILLIS = 1000 * 60 * 60;
/**
* 创建token
* @param claimMap
* @return
*/
public static String createToken(Map<String, Object> claimMap) {
long currentTimeMillis = System.currentTimeMillis();
return Jwts.builder()
.setId(UUID.randomUUID().toString())
.setIssuedAt(new Date(currentTimeMillis)) // 设置签发时间
.setExpiration(new Date(currentTimeMillis + TOKEN_EXPIRE_MILLIS)) // 设置过期时间
.addClaims(claimMap)
.signWith(generateKey())
.compact();
}
/**
* 验证token
* @param token
* @return 0 验证成功,1、2、3、4 验证失败
*/
public static int verifyToken(String token) {
try {
Jwts.parser().setSigningKey(generateKey()).parseClaimsJws(token);
return 0;
} catch (ExpiredJwtException e) { // 过期JWT异常
e.printStackTrace();
return 1;
} catch (UnsupportedJwtException e) { // 不支持JWT异常
e.printStackTrace();
return 2;
} catch (MalformedJwtException e) { // 格式不正确的JWT
e.printStackTrace();
return 3;
} catch (IllegalArgumentException e) { // 非法数据异常
e.printStackTrace();
return 4;
}
}
/**
* 解析token
* @param token
* @return
*/
public static Claims parseToken(String token) {
return Jwts.parser() // 得到DefaultJwtParser
.setSigningKey(generateKey()) // 设置签名密钥
.parseClaimsJws(token)
.getBody();
}
/**
* 生成安全密钥
* @return
*/
public static Key generateKey() {
return new SecretKeySpec(SECRET_KEY.getBytes(), SignatureAlgorithm.HS256.getJcaName());
}