Java JWT 判断 Token 过期
在现在的应用中,JWT(JSON Web Token)被广泛用于身份验证和信息的安全传递。管理 JWT 的生命期是确保应用安全的关键部分。本文将带你学习如何判断 JWT 是否过期。
流程步骤
为了实现判断 JWT 是否过期,我们需要完成以下步骤:
步骤 | 操作 |
---|---|
1 | 创建 JWT |
2 | 解析 JWT |
3 | 获取过期时间 |
4 | 判断当前时间与过期时间的关系 |
步骤详解
1. 创建 JWT
首先,需要依赖库来生成 JWT。我们以 jjwt
这个库为例。
<!-- 在你的pom.xml文件中添加这段依赖 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version> <!-- 确保使用适合你项目的版本 -->
</dependency>
创建 JWT 的代码示例如下:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
public class TokenGenerator {
private static final String SECRET_KEY = "your_secret_key"; // 密钥
public static String createToken() {
return Jwts.builder()
.setSubject("user@example.com") // 设置用户信息
.setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 设置过期时间,1小时
.signWith(SignatureAlgorithm.HS256, SECRET_KEY) // 使用 HS256 加密算法和密钥生成
.compact();
}
}
2. 解析 JWT
接着,解析 JWT 以获取有效载荷(payload)。
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class TokenParser {
private static final String SECRET_KEY = "your_secret_key"; // 密钥
public static Claims parseToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY) // 设置密钥
.parseClaimsJws(token) // 解析 JWT
.getBody(); // 获取有效载荷
}
}
3. 获取过期时间
从有效载荷中提取过期时间:
public static Date getExpirationDate(Claims claims) {
return claims.getExpiration(); // 获取过期时间
}
4. 判断当前时间与过期时间的关系
最后,我们就可以判断 token 是否过期。
import java.util.Date;
public class TokenValidator {
public static boolean isTokenExpired(Date expirationDate) {
return expirationDate.before(new Date()); // 判断过期时间是否在当前时间之前
}
}
完整代码示例
综合以上步骤,以下是一个简单的示例:
public class JwtExample {
public static void main(String[] args) {
String token = TokenGenerator.createToken(); // 1. 创建 Token
System.out.println("Generated Token: " + token);
Claims claims = TokenParser.parseToken(token); // 2. 解析 Token
Date expirationDate = getExpirationDate(claims); // 3. 获取过期时间
boolean isExpired = TokenValidator.isTokenExpired(expirationDate); // 4. 判断是否过期
System.out.println("Is Token Expired? " + isExpired);
}
}
状态图
以下是 Token 生命周期的状态图:
stateDiagram
[*] --> Created
Created --> Issued
Issued --> Validated
Validated --> Expired
Validated --> Revoked
Expired --> [*]
关系图
以下是 JWT 与其他相关对象之间的关系图:
erDiagram
JWT {
String token
Date expiration
}
User {
String username
}
JWT ||--|| User : "issued to"
结尾
现在你已经掌握了如何在 Java 中判断 JWT 是否过期的基本步骤与实现方法。通过这篇文章,你不仅可以生成和解析 JWT,还能对其进行有效性判断。如果你对 JWT 有更多的需求,可能还需要学习如何处理刷新Token等功能。希望这对你未来的开发工作有所帮助!