本篇介绍使用 JJWT(Java JWT)库来生成 JWT Token,步骤如下:
- 添加依赖:
在项目中添加 JJWT 依赖项。对于 Maven 项目,可以在 pom.xml 文件中添加以下依赖项:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
- 创建 JWT Token:
下面是使用 JJWT 库创建 JWT Token 的示例代码:
@Test
public void genJwtToken() {
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
String jwtToken = Jwts.builder().setSubject("JWT Demo") // 设置主题(Subject)
.claim("userId", "oscar").claim("role", "admin").signWith(key) // 使用指定的算法和密钥签名
.compact();
System.out.println("jwtToken="+jwtToken);
}
在上述示例中,设置了以下信息:
- 主题(Subject)为 “JWT Demo”
- 自定义声明(Claim)为 “userId” 和 “oscar”
使用signWith()
方法指定签名算法(这里使用 HS256)和密钥进行签名。最后使用compact()
方法生成 JWT Token。
产生的Token如下图所示:
- 调整 Token 有效期(可选):
默认情况下,生成的 JWT Token 是不带过期时间的。如果需要设置 Token 的有效期,可以使用setExpiration()
方法来指定有效期,示例如下:
@Test
public void tokenWithExpired() {
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000); // 设置过期时间为1小时后
String jwtToken = Jwts.builder().setSubject("JWT Demo") // 设置主题(Subject)
.setExpiration(expiration) //设置过期时间
.claim("userId", "oscar").claim("role", "admin")
.signWith(key) // 使用指定的算法和密钥签名
.compact();
System.out.println("jwtToken="+jwtToken);
}
在上述示例中,使用 setExpiration()
方法设置了 Token 的过期时间为当前时间的 1 小时后。
在线完整演示代码
- https://github.com/osxm/java-ency/blob/master/src/main/java/com/osxm/je/topic/security/JwtDemo.java