本篇介绍使用 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 的示例代码:
@Testpublic 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()
方法来指定有效期,示例如下:
@Testpublic 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