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等功能。希望这对你未来的开发工作有所帮助!