Java实现JSON Web Token(JWT)的生成、解码和验证

时间:2025-03-09 07:31:01

JSON Web Token(JWT)是一种用于安全传输信息的开放标准。它可以用于认证和授权用户,以及在不同系统之间传输数据。在本文中,我们将介绍如何在 Java 中使用 jjwt 库来生成、解码和验证 JWT

引入 jjwt 库

首先,你需要在你的项目中引入 jjwt 库。如果你使用 Maven,可以在 中添加以下依赖:

<dependency>
    <groupId></groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

生成 JWT

以下是使用 jjwt 验证 JWT 的示例代码:

import ;
import ;
import ;

public class JwtGenerator {
    public static void main(String[] args) {
        // 设置过期时间为 1 天
        long expirationTime = () + 86400000;
        String token = ()
                .setSubject("user123") // 设置 subject
                .setExpiration(new Date(expirationTime)) // 设置过期时间
                .signWith(SignatureAlgorithm.HS256, "secret") // 设置签名
                .compact();
        (token);
    }
}

验证 JWT

以下是使用 jjwt 验证 JWT 的示例代码:

import ;
import ;
import ;

public class JwtVerifier {
    public static void main(String[] args) {
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMTIzIiwiZXhwIjoxNjIwNzg3NzE3fQ.hXcJHdYvy3l0gI6HgNv6v-Tx_lL4FOWp65eGJ0YJtDk";
        try {
            Claims claims = ()
                    .setSigningKey("secret")
                    .parseClaimsJws(token)
                    .getBody();
            ("Subject: " + ());
        } catch (SignatureException e) {
            ("Invalid token.");
        }
    }
}

在这个例子中,我们使用 parser() 方法解析 JWT,并使用 setSigningKey() 方法设置签名密钥。如果 JWT 验证成功,我们可以从 Claims 对象中获取 subject 值。

希望这篇文章能帮助你开始使用 jjwt 来生成、解码和验证 JWT。