Java JWT 库 | AI生成和翻译

Home 2025.03

要在 Java 中使用 com.nimbusds.jwt 库从 JSON Web Token (JWT) 中提取过期时间、签发时间及其他声明信息,请按照以下步骤操作。本解决方案假设您正在处理签名 JWT(这是最常见的类型),并重点提供清晰实用的实现方法。


前置准备

首先确保您的项目中已添加 Nimbus JOSE + JWT 库。如果使用 Maven,请在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>nimbus-jose-jwt</artifactId>
    <version>9.37</version> <!-- 请替换为最新版本 -->
</dependency>

您可以在 Maven Central 查看最新版本。


提取过期时间、签发时间及其他声明的步骤

以下是使用 com.nimbusds.jwt 库解析 JWT 并获取过期时间、签发时间及附加声明的方法:

  1. 解析 JWT 字符串:使用 SignedJWT.parse() 方法将 JWT 字符串转换为 SignedJWT 对象
  2. 获取声明集:通过 getJWTClaimsSet() 访问 JWT 中的声明(键值对)
  3. 提取特定声明
    • 使用 getExpirationTime() 获取过期时间(exp 声明)
    • 使用 getIssueTime() 获取签发时间(iat 声明)
    • 使用 getSubject()getClaim() 等方法获取其他声明
  4. 错误处理:将解析逻辑包裹在 try-catch 块中以处理可能的解析问题

示例代码

以下完整 Java 示例演示了如何从 JWT 中提取过期时间、签发时间及附加声明(如主题):

import com.nimbusds.jwt.SignedJWT;
import com.nimbusds.jwt.JWTClaimsSet;
import java.text.ParseException;
import java.util.Date;

public class JwtExtractor {

    public static void main(String[] args) {
        // 请替换为实际的 JWT 字符串
        String jwtString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyMzk5MjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";

        try {
            // 步骤 1:解析 JWT 字符串
            SignedJWT signedJWT = SignedJWT.parse(jwtString);

            // 步骤 2:获取声明集
            JWTClaimsSet claimsSet = signedJWT.getJWTClaimsSet();

            // 步骤 3:提取过期时间和签发时间
            Date expirationDate = claimsSet.getExpirationTime();
            Date issuedDate = claimsSet.getIssueTime();
            String subject = claimsSet.getSubject(); // 其他声明示例

            // 步骤 4:显示结果
            if (expirationDate != null) {
                System.out.println("过期时间: " + expirationDate);
            } else {
                System.out.println("未设置过期时间");
            }

            if (issuedDate != null) {
                System.out.println("签发时间: " + issuedDate);
            } else {
                System.out.println("未设置签发时间");
            }

            if (subject != null) {
                System.out.println("主题: " + subject);
            } else {
                System.out.println("未设置主题");
            }

        } catch (ParseException e) {
            System.out.println("无效的 JWT: " + e.getMessage());
        }
    }
}

代码说明

1. 导入包

2. 解析 JWT

3. 访问声明

4. 提取特定声明

5. 错误处理


注意事项


示例输出

对于上述示例 JWT 字符串:

过期时间: Wed Jan 17 19:52:02 UTC 2018
签发时间: Wed Jan 17 19:50:22 UTC 2018
主题: 1234567890

这种方法通过 com.nimbusds.jwt 库提供了简单有效的途径来提取 JWT 中的过期时间、签发时间及其他声明。请将 jwtString 替换为您自己的令牌,并根据具体需求调整代码!


Back Donate