1

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 部分の新しいメソッドを作成する必要がありますか?

4

4 に答える 4

3

プレーン Java を使用すると、java.util.Calendarおよびjava.util.Dateクラスを使用してこれを実現できます。現在の日時を使用して 1 年が経過したかどうかをチェックする関数のコード サンプルを次に示します。

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;
}

どの方法を選択するかはあなた次第です。IMHO、読みやすさ、理解、およびメンテナンスを容易にするために、Joda Time でコードを使用します。

于 2013-02-19T04:32:07.817 に答える
0

データベースから取得した日付は、パスワードが作成された/最後に変更された日付であると想定しています。その場合、今日の日付と比較して日数を取得することはできませんか? サンプル コードについては、この投稿と回答を確認してください。

于 2013-02-19T04:08:17.610 に答える
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;
于 2013-02-19T04:16:06.200 に答える
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
}
}   
于 2013-02-19T04:26:17.477 に答える