【问题标题】:How to restrict only one session at a time per user in Java Web App?java - 如何在Java Web App中一次只限制每个用户一个会话?
【发布时间】:2014-07-03 21:31:45
【问题描述】:

我在 Eclipse 中为我的 Web 应用程序使用 Tomcat 7.0、Spring 4.0.2、Web Module 3.0。我的应用程序中有一个要求,即一个用户不得允许从两个不同的客户端登录。除此之外,我还需要考虑this。

我能想到的解决方案:
--> 在应用级别声明一个静态集。
--> 每次检查之前检查用户名是否包含在该Set中,如果包含则不允许登录。
--> 每次登录Set后,在Set中添加用户名。
--> 每次从 Set 注销后删除用户名。

但我无法想到这个解决方案会失败的所有情况。我认为当用户直接关闭浏览器时,这是行不通的。请帮助找出所有场景以及可以处理所有场景的适当解决方案。提前致谢。

【问题讨论】:

  • 您的程序中的客户端是什么?一个人还是一个用户名?
  • 客户端=浏览器?你想通过什么来实现? o.O
  • 多个浏览器的连接可以通过在当前登录用户的数据库中创建一个条目来控制。诀窍是让浏览器关闭以删除条目。您需要考虑的其他事项可能允许用户访问系统,但不能从多个页面访问相同的数据。要获得环绕会话共享,您可以在 window.sessionStorage 中创建一个变量,这将为您提供一个可以通过 javascript 访问的唯一密钥
  • 我会推荐 Spring Security,它支持 this 开箱即用。总是存在用户关闭浏览器而不是注销的问题(我猜大多数用户会关闭浏览器而不是注销)。
  • Spring Security 会直接处理关闭浏览器吗?

标签: java spring session login restriction


【解决方案1】:

Spring Security 开箱即用地支持这一点。您可以迁移您的身份验证过程以使用 Spring Security 吗?

请参阅下面的第 2.3.3 节并发会话管理:

http://docs.spring.io/spring-security/site/docs/3.0.x/reference/springsecurity-single.html

【讨论】:

  • Spring Security 会直接处理关闭浏览器吗?
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2018-06-10
  • 2012-06-02
相关资源
最近更新 更多