帮我用java代码写一个获取jwt令牌的方法要求简单有注释
时间: 2023-06-15 08:03:33 浏览: 178
springboot-graphql-sqqr-jwt-demo:GraphQL Java后端代表使用Spring Boot,graphql-spqr和jsonwebtoken进行身份验证的正确方法
好的,以下是一个简单的获取 JWT 令牌的 Java 代码,带有注释解释每一步操作:
```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtil {
// JWT 令牌过期时间为 1 小时
private static final long EXPIRATION_TIME = 3600_000;
// JWT 密钥,开发者需要根据实际情况设置
private static final String SECRET_KEY = "mySecretKey";
/**
* 生成 JWT 令牌
*
* @param subject JWT 令牌主题,一般为用户 ID
* @return JWT 令牌
*/
public static String generateToken(String subject) {
// 计算 JWT 过期时间
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
// 使用 HS256 算法生成 JWT 签名
String token = Jwts.builder()
.setSubject(subject)
.setExpiration(expirationDate)
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
return token;
}
/**
* 校验 JWT 令牌
*
* @param token JWT 令牌
* @param subject JWT 令牌主题,一般为用户 ID
* @return 是否校验通过
*/
public static boolean validateToken(String token, String subject) {
try {
// 解析 JWT 令牌
String tokenSubject = Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody()
.getSubject();
// 校验 JWT 令牌主题是否匹配
return tokenSubject.equals(subject);
} catch (Exception e) {
// 解析 JWT 令牌失败,或者主题不匹配
return false;
}
}
}
```
其中,该类包含了两个方法:
- `generateToken(String subject)`:生成 JWT 令牌,其中 `subject` 参数为 JWT 主题,一般为用户 ID。
- `validateToken(String token, String subject)`:校验 JWT 令牌是否有效,其中 `token` 参数为 JWT 令牌,`subject` 参数为 JWT 主题,一般为用户 ID。
需要注意的是,该代码使用了 `io.jsonwebtoken` 库,因此需要在项目中引入该库的依赖。
阅读全文