记住我/保持登录,在jsp登录页面

时间:2012-07-16 21:08:07

标签: java jsp servlets login remember-me

我有一个登录屏幕,我想通过检查数据库中的凭据来验证用户。我知道大多数浏览器都能记住密码,但是如何使用浏览器cookie实现“记住我”复选框?我正在使用sign.jsp和Auth servlet(doPost)以及使用https进行基本访问身份验证。

我知道我需要将用户ID +令牌存储到cookie中。我从另一个帖子中找到了以下代码。

在你的servlet响应处理程序(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中,如何在没有密码的情况下签署用户。我可以使用什么方法?

如果可能,请详细说明或提供一些代码。我真的很擅长这种东西。

最好的问候

2 个答案:

答案 0 :(得分:0)

仅在cookie中存储userid是不够的。我看到的最简单的解决方案是存储某种密码哈希以及用户ID。

使用userid + some_secret_string +密码。

计算出它的哈希函数。

将userid和计算哈希推送到cookie。

当用户返回时,您将获得2个字符串。

根据用户ID,您将从数据库中获取密码。

再次计算哈希函数。

将计算出的哈希值与cookie中的哈希值进行比较。

如果匹配 - 用户再次登录。

答案 1 :(得分:0)

通常我们存储令牌 - 一种状态信息,用于确定是否将用户记录到cookie中。 (不要在cookie中存储密码和其他凭证)。

我建议您使用filter。在doFilter()方法中读取cookie并根据cookie的值或cookie的可用性,您可以验证请求。