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。