JwtUtils工具类
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtils {
public static final String SECRET_KEY = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789066666";
// 过期时间,单位为秒
private static final long EXPIRATION_TIME = 30; // 1 小时
/**
* 生成 JWT
*
* @param subject 主题,即用户信息
* @return JWT
*/
public static String generateToken(String subject) {
// 计算过期时间
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME * 1000);
// 生成 JWT
String jwt = Jwts.builder()
.setSubject(subject)
.setExpiration(expirationDate)
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
return jwt;
}
/**
* 解析 JWT
*
* @param jwt JWT
* @return 解析结果
*/
public static Claims parseToken(String jwt) {
Claims claims = Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
/**
* 验证 JWT 是否过期
*
* @param jwt JWT
* @return 是否过期
*/
public static boolean isTokenExpired(String jwt) {
try {
Claims claims = parseToken(jwt);
Date expirationDate = claims.getExpiration();
return expirationDate.before(new Date());
} catch (Exception e) {
// 过期会抛异常,所以直接捕捉,并返回ture代表已过期
return true;
}
}
public static void main(String[] args) {
String token = generateToken("admin");
System.out.println(token);
System.out.println(parseToken(token));
System.out.println(isTokenExpired(token));
}
}