限制2个Web应用程序中同一用户的多次登录

时间:2019-09-10 11:44:30

标签: servlets architecture websphere httpsession tomcat9

我们有限制跨2个Web应用程序同时登录同一用户的要求。

我们有2个Web应用程序,例如:WebApp1,WebApp2。

用户:仪表板

如果仪表板用户登录到WebApp1,则不允许同一用户登录WebApp2,而是在第二次登录时显示错误消息。

尝试的解决方案:

如果会话处于活动状态,则使用相同的用户ID阻止第二次登录,并向用户显示错误消息。

此想法是在数据库中维护用户ID,应用程序名称和会话ID。在同一用户的第二次登录时,检查数据库表中是否存在针对该用户ID的记录,然后阻止第二次登录并向用户显示错误消息。

在下面清除数据库记录(用户ID,会话ID和应用程序名称) 情况:

  1. 注销
  2. 会话超时
  3. 重新启动应用程序。

不确定如何处理以下情况。

  1. 关闭浏览器。
  2. 浏览器崩溃
  3. 系统崩溃

如果第二次登录请求来自有效用户,则管理员应该能够使第一次登录的会话无效,因为该用户是攻击者。

什么是使WebApp2 / WebApp1的Http会话无效的最佳方法?

2 个答案:

答案 0 :(得分:1)

如果您确实需要了解第一个会话的状态,则可以跳过尝试管理服务器中的会话的操作,而不必维护客户端的心跳。让客户端每5秒向服务器发送一次请求,以更新“最近一次”记录,该记录包括其IP地址和来源,以及“最近一次”是否是注销事件。

然后另一个应用可以询问“ Last Seen”,如果它超过5秒钟(我实际上会将其提高到10以进行询问)或一个LogOut事件,则假定第一个会话消失了,他们可以免费登录第二个应用程序。如果“ Last Seen”少于5到10秒,请将它们都撞掉,并用两个IP地址提醒管理员,确定应该杀死哪个IP地址。

答案 1 :(得分:0)

除了您拥有的资源外,您还可以将上次活动时间保存在会话数据库中并进行更新,如果有会话更新,则该频率取决于您的要求(例如每个请求或5分钟一次) 。然后,在应用程序/浏览器/系统重新启动的情况下,即使会话存在,即使记录存在,您也要登录该用户。并且您可以拥有一个管理员用户,可以根据需要手动删除条目。

另一种解决方案是始终登录新应用,然后注销旧应用。但这需要在应用程序中引入其他逻辑,以检查会话是否仍然有效。