2010-09-24 103 views
1

在我的Web应用程序中,即使重新启动浏览器(“记住我”功能的网站),我也需要识别登录的用户。使用Java Servlet API实现此目标的最佳实践是什么?使用Java Servlets进行长时间登录的最佳方式

我已经考虑了以下选项:

  1. 长期使用HttpSession的会议,并存储用户标识符作为会议的一个属性。这种方法不允许用户重新启动浏览器,因为JSESSIONID cookie不是持久的,并且没有标准的方法来改变它的属性。我考虑的唯一选择是使用Tomcat 7.0的SessionCookieConfig接口来调整默认的JSESSIONID参数。但是对这种解决方案的可扩展性存在疑虑,因为Tomcat会长时间存储所有会话。

  2. 使用短期的HttpSessions和一些持久性cookie一起存储用户标识符和一些安全哈希值。当用户重新启动浏览器时,它发送持久性cookie,应用程序服务器将新会话与用户标识符绑定。

实现此目的的常用方法是什么?

+0

只需复制大家伙正在做的事情,像Google,Yahoo或Microsoft ... – 2010-09-24 14:32:41

+0

他们使用什么方法?你能建议从哪里获得更多信息? – pheasant 2010-09-24 14:37:40

+0

重复的[Java - 我如何让用户登录到我的网站几个月?](http://stackoverflow.com/questions/2185951/java-how-do-i-keep-a-user-logged-into -my-site-for-months) – BalusC 2010-09-24 14:37:49

回答

0

我一直需要对会话进行更多的控制,因为我需要他们跨多个Web应用程序工作,所以我从头开始实施自己的解决方案。这很容易,只需散列一个随机数并将其存储在数据库中。如果你没有或想要一个RDBMS只是某种键/值存储。

0

您是否使用普通的基于过滤器的身份验证?您的网站需要有多安全?

方式一:

降与他们的浏览器中有一个代码,一个cookie。在Tomcat中,配置一个典型的过滤器。过滤器抓取代码并根据数据库检查其有效性。如果代码有效,则避免使用普通的Tomcat认证。如果需要任何持久化的会话变量,则可以立即从数据库加载它们。

在每次响应中放入一个新的cookie代码。它应该包含盐的散列,用户的ID和用户的IP地址。这样,如果请求来自错误的计算机,Cookie将不会有任何好处。虽然IP是可欺骗的。

请记住,当你这样做时,你就是在短路安全。你在说:“哦,看,你刚从哪里冒出来,我想我认识你,在这里,有我的城堡的钥匙!”这听起来像我们从营销人员那里得到的那种要求,他们不理解关于安全的事情,并且不关心,因为如果我们被黑客攻击没有问题。

相关问题