【问题标题】:How to check if a password is over one year old?如何检查密码是否超过一年?
【发布时间】:2013-02-03 16:05:06
【问题描述】:

我正在尝试在 MVC 中使用 JSP 开发用户登录/注册。该程序将为用户进行简单的登录、创建和更新。在模型部分,我应该根据以下标准返回 0、1、2、3。

0 如果用户验证成功 1 如果用户验证成功但密码较弱 2 如果用户验证成功但密码过期(超过 1 年) 3 如果用户未通过验证

这是我到目前为止所做的验证方法的代码,

public int Validate() {

        try {
            Class.forName(driverName).newInstance();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {

            Connection connection = DriverManager.getConnection(dbURL,
                    username, password);

            String verifyQuery = "SELECT COUNT(email), dateSet, strength FROM users WHERE email=? AND hashPassword=SHA2(CONCAT(?, salt), 256)";
            PreparedStatement verify = connection.prepareStatement(verifyQuery);

            verify.setString(1, email);
            verify.setString(2, pass);
            ResultSet verified = verify.executeQuery();
            while (verified.next()) {
                if (verified.getInt(1) == 1) {
                    email_db = verified.getString(2);
                    pass_db = verified.getString(3);
                    date = verified.getDate(5);
                    strength = verified.getString(6);

                }
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if (email_db.equals(email) && pass_db.equals(pass)) {
            status = 0;
        }
        if (email_db.equals(email) && pass_db.equals(pass)
                && strength.equals("weak")) {
            status = 1;
        }
        if (email_db.equals(email) && pass_db.equals(pass) && date> ){

        }
        return status;
    }

我对日期部分感到困惑,有什么建议吗?我应该为 Date 部分写一个新方法吗?

【问题讨论】:

标签: java mysql jsp servlets


【解决方案1】:

使用纯 Java,您可以使用 java.util.Calendarjava.util.Date 类实现此目的。这是一个函数的代码示例,该函数使用当前日期时间检查它是否已经过了一年

public boolean hasPassedAYear(Date date) {
    long currentDate = Calendar.getInstance().getTimeInMillis();
    long dateToEval = date.getTime();
    // 1000 => milliseconds to seconds
    // 60 => seconds to minutes
    // 60 => minutes to hours
    // 24 => hours to days
    long days = (currentDate - dateToEval) / (1000 * 60  * 60 * 24);
    return days >= 365;
}

不过,如果您想要一个好的代码(像所有人一样),您应该使用Joda Time,它可以提供更好的日期/时间处理。这将是相同的功能,但使用 Joda 时间库:

public boolean hasPassedAYear(Date date) {
    DateTime currentDate = new DateTime();
    DateTime dateToEval = new DateTime(date);
    Interval interval = new Interval(dateToEval, currentDate);
    return interval.toPeriod().getYears() >= 1;
}

由您决定选择哪种方法。恕我直言,为了便于阅读、理解和维护,我会将代码与 Joda Time 一起使用。

【讨论】:

  • 我想避免使用库。
  • @user2082191 当然,这就是我首先添加纯 Java 解决方案的原因。事实上,我仍然认为使用 Joda 处理日期时间操作会更好,因为您可以看到它非常易于使用。另外,请注意,普通 Java 解决方案不会对闰年(366 天)进行任何计算,而 Joda Time 已经处理了它。
【解决方案2】:

您可以使用此代码..

if (email_db.equals(email) && pass_db.equals(pass) ){


Date dt = date;//Your Date from database 
Calendar passCreatedOn = Calendar.getInstance(); 
passCreatedOn.setTime(dt);


Calendar today=Calendar.getInstance();
Integer noOfDays=( (today.getTime() - passCreatedOn.getTime()) / (1000 * 60 * 60 * 24));
if(noOfDays>365)
{
    return 2
}
}   

【讨论】:

    【解决方案3】:

    试试下面的代码

    java.util.Date lastDate = result.getTimestamp("date");
    java.util.Date todaysDate = new java.util.Date(System.currentTimeMillis());
    
    long days1 = lastDate.getTime()/(60*60*24*1000);
    long days2 = todaysDate.getTime()/(60*60*24*1000);
    
    long difference = days2-days1;
    

    【讨论】:

      【解决方案4】:

      我假设您从数据库中获取的日期是密码创建/上次修改的日期。在这种情况下,将与今天的日期进行比较以获得无效的天数? 检查this post 和示例代码的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多