2

ログイン画面があり、データベースの資格情報を確認してユーザーを認証したい。ほとんどのブラウザがパスワードを記憶できることは知っていますが、ブラウザのCookieを使用して[記憶する]チェックボックスを実装するにはどうすればよいですか?sign.jspとAuthサーブレット(doPost)、およびhttpsによる基本アクセス認証を使用しています。

ユーザーID+トークンをCookieに保存する必要があることはわかっています。別のスレッドから次のコードを見つけました。

サーブレット応答ハンドラー(doPost、doGetなど)で、次の方法でCookieを作成します-

if(remember_me_is_checked)
{
    Cookie c = new Cookie("userid", userId.toString());
    c.setMaxAge(24*60*60);
    response.addCookie(c);  // response is an instance of type HttpServletReponse
}

それらを読むために、あなたはこのようなものを使うことができます-

Cookie[] cookies = request.getCookies();     // request is an instance of type 
                                             //HttpServletRequest
boolean foundCookie = false;

for(int i = 0; i < cookies.length; i++)
{ 
    Cookie c = cookies[i];
    if (c.getName().equals("userid"))
    {
        string userId= c.getValue();
        foundCookie = true;
    }
} 

私の質問は、ユーザー情報をCookieに保存した後、ユーザーが次回ログインしたときにユーザーを自動的にサインインするにはどうすればよいですか?私が理解していないのは、ユーザーのログインIDのみがCookieに保存されているということです。どうすれば、パスワードなしでユーザーにサインインできますか。どのような方法を使用できますか?

可能であれば、具体的にいくつかのコードを説明または提供してください。私はこの種のものに本当に慣れていません。

よろしくお願いします

4

2 に答える 2

0

ユーザーIDのみをCookieに保存するだけでは不十分です。私が見る最も簡単な解決策は、ユーザーIDとともにある種のパスワードハッシュを保存することです。

ユーザーID+some_secret_string+パスワードを取得します。

それからハッシュ関数を計算します。

ユーザーIDと計算されたハッシュをCookieにプッシュします。

ユーザーが戻ると、2つの文字列が表示されます。

ユーザーIDに基づいて、データベースからパスワードを取得します。

ハッシュ関数を再度計算します。

計算されたハッシュをCookieからのハッシュと比較します。

それらが一致する場合-ユーザーは再度ログインします。

于 2012-07-16T21:48:34.857 に答える
0

通常、トークン(ユーザーがログインしているかどうかを判断するためのステータス情報)をCookieに保存します。(パスワードやその他の資格情報をCookieに保存しないでください)。

を使用することをお勧めしますfilter。doFilter()メソッドでCookieを読み取り、Cookieの値またはCookieの可用性に基づいて、リクエストを認証できます。

于 2012-07-17T01:30:04.450 に答える