2012-07-16 130 views
2

我有一個登錄屏幕,我想通過檢查數據庫中的憑據來驗證用戶身份。我知道大多數瀏覽器都可以記住密碼,但我如何實現使用瀏覽器cookie記住我的複選框?我正在使用sign.jsp和Auth servlet(doPost)以及使用https進行基本訪問身份驗證。記住我/保持登錄狀態,在jsp登錄頁面

我知道我需要將userid +令牌存儲到cookie中。我從另一個線程發現了以下代碼。

在你的servlet響應處理器(doPost方法,的doGet等),創建以下列方式餅乾 -

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中,我怎麼能沒有密碼簽署用戶。我可以使用什麼方法?

如果可能,請詳細解釋或提供一些代碼。我對這類東西真的很陌生。

問候

+0

你是什麼意思,「我不想通過檢查數據庫中的憑據來認證用戶」? – Lobo 2012-07-16 21:46:30

+0

更具體地說,如果用戶名和/或密碼與我的數據庫中的用戶名和/或密碼相匹配,我可以使用什麼方法來登錄用戶。 – Joey 2012-07-16 21:59:28

回答

0

通常我們將令牌存儲到cookies中,以確定用戶是否登錄。 (不要在Cookie中存儲密碼和其他憑證)。我想建議您使用filter。在doFilter()方法中,讀取cookie並基於cookie的值或cookie的可用性,您可以驗證請求。

+0

你的建議非常好。但是,如何在成功驗證身份後登錄用戶。我不存儲他們的密碼。我只是存儲用戶標識和標記,cookie的值或類似的東西,但不是密碼。我可以使用什麼方法自動簽名。我使用基於容器的表單身份驗證。如果我通過自動提交存儲在DataBase中的用戶名和密碼來存儲密碼,我想我可以感嘆他們。如果我不存儲他們的密碼怎麼辦?我該怎麼辦? – Joey 2012-07-19 17:08:09

0

這是不夠的,只存儲用戶ID在cookie。我看到的最簡單的解決方案是存儲某種密碼散列以及用戶標識。

取用戶名+ some_secret_string +密碼。

計算散列函數。

將用戶標識和計算出的散列推送到cookie。

當用戶返回時,您將得到2個字符串。

根據用戶標識,您將從數據庫中獲取密碼。

再次計算散列函數。

將計算出的散列與來自cookie的散列進行比較。

如果它們匹配 - 用戶再次登錄。