Java如何设置JWT过期时间
JWT(JSON Web Token)是一种用于在网络应用之间安全地传输信息的开放标准(RFC 7519)。它由三部分组成:头部、载荷和签名。其中,载荷部分包含了一些标准的声明(例如过期时间exp),以及其它自定义的声明。
要设置JWT的过期时间,需要在创建JWT时设置载荷部分的过期时间声明,并在验证JWT时检查该声明是否过期。
设置JWT过期时间
下面是一个示例代码,展示了如何使用Java设置JWT的过期时间:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtUtils {
private static final String SECRET_KEY = "your-secret-key";
private static final long EXPIRATION_TIME = 86400000; // 24小时
public static String generateJwtToken(String username) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
public static Claims parseJwtToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody();
}
}
在上述代码中,我们使用了io.jsonwebtoken
库来创建和解析JWT。generateJwtToken
方法用于生成JWT,其中通过setExpiration
方法设置了过期时间。parseJwtToken
方法用于解析JWT,并返回载荷部分的内容。
检查JWT过期时间
在验证JWT时,我们需要检查JWT的过期时间是否已经过期。可以通过比较当前时间和JWT的过期时间来进行判断。
下面是一个示例代码,展示了如何检查JWT的过期时间:
import io.jsonwebtoken.Claims;
public class JwtValidator {
public static boolean isJwtTokenExpired(String token) {
Claims claims = JwtUtils.parseJwtToken(token);
return claims.getExpiration().before(new Date());
}
public static void main(String[] args) {
String token = "your-jwt-token";
if (isJwtTokenExpired(token)) {
System.out.println("JWT token has expired");
} else {
System.out.println("JWT token is still valid");
}
}
}
在上述代码中,我们使用isJwtTokenExpired
方法来检查JWT的过期时间是否已经过期。如果过期时间在当前时间之前,则表示JWT已过期。
类关系图
下面是一个表示JWT工具类和验证类之间关系的类关系图(使用Mermaid语法):
classDiagram
class JwtUtils {
+generateJwtToken(String username)
+parseJwtToken(String token)
}
class JwtValidator {
+isJwtTokenExpired(String token)
}
JwtUtils --> JwtValidator
上述类关系图展示了JwtUtils
类和JwtValidator
类之间的关系,其中JwtUtils
类用于生成和解析JWT,JwtValidator
类用于验证JWT的过期时间。
总结
在Java中设置JWT的过期时间,我们需要在创建JWT时设置载荷部分的过期时间声明,并在验证JWT时检查该声明是否过期。通过使用合适的库(如io.jsonwebtoken
),我们可以轻松地创建、解析和验证JWT。