我正在尝试使用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部分编写一个新方法吗?
答案 0 :(得分:3)
使用普通Java,您可以使用java.util.Calendar
和java.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一起使用,以便于阅读,理解和维护。
答案 1 :(得分:0)
我假设您从数据库获取的日期是创建/上次修改密码的日期。在这种情况下,将与今天的日期相比,以获得无法工作的天数? 查看this post并获取示例代码的答案。
答案 2 :(得分:0)
尝试以下代码
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;
答案 3 :(得分:0)
您可以使用此代码..
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
}
}