如何在java中检查令牌是否过期?

如何在java中检查令牌是否过期?,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个用户,它有:id,用户名,密码,到期日期。当我生成令牌时,我生成一个字符串,如何检查令牌是否未过期?它背后的核心逻辑是将当前日期与令牌日期进行比较。如果当前日期大于令牌日期,则令牌已过期。下面是一个执行相同操作的代码示例 SimpleDateFormat sdf=新的SimpleDateFormat(“yyyy-MM-dd”); Date date1=sdf.parse(“2009-12-31”); 日期2=sdf.parse(“2010-01-31”); 如果(日期1.与(日期2)相比

我有一个用户,它有:id,用户名,密码,到期日期。当我生成令牌时,我生成一个字符串,如何检查令牌是否未过期?

它背后的核心逻辑是将当前日期与令牌日期进行比较。如果当前日期大于令牌日期,则令牌已过期。下面是一个执行相同操作的代码示例

SimpleDateFormat sdf=新的SimpleDateFormat(“yyyy-MM-dd”);
Date date1=sdf.parse(“2009-12-31”);
日期2=sdf.parse(“2010-01-31”);
如果(日期1.与(日期2)相比>=0)
System.out.println(“令牌未过期”);
如果(日期1)比(日期2)<0
System.out.println(“令牌过期”);
参考链接:

java.time 一定要在日期和时间工作中使用java.time,即现代java日期和时间API

public class User {
    private String username;
    private String password;
    private Instant tokenExpires;

    // constructor, getters, setters

    public boolean isTokenExpired() {
        return ! Instant.now().isBefore(tokenExpires);
    }

}
日期
的现代替代品是
即时
。这是一个时间点

如果无法更改
User
类和
getTokenExpires()
返回老式的
Date
对象:

    Instant tokenExpires = yourUser.getTokenExpires().toInstant();
    if (Instant.now().isBefore(tokenExpires)) {
        System.out.println("Token has not expired");
    } else {
        System.out.println("Token not expired");
    }

链接:解释如何使用java.time。

也许使用JWT更好。您可以定义令牌的有效期,并将有关用户的数据存储为声明。以下是示例教程: 我认为这是一个更好的解决方案,因为您不需要实现所有功能。 在您当前的实现中,一些用户可能会修改有效负载。
但是请记住,密码之类的数据不应该包含在JWT中,因为任何拥有令牌的人都可以读取所有声明

请不要教年轻人使用早已过时且臭名昭著的简化格式课程。至少不是第一个选择。而且不是毫无保留的。今天,我们在及其
DateTimeFormatter
中有了更好的功能。我建议您不要使用
Date
。那门课设计得很糟糕,而且早已过时。而是使用
Instant
或来自的其他类。Hibernate5很乐意从您的数据库中检索这样的内容。