每个用户只允许一个会话(代码片段)

author author     2022-12-29     649

关键词:

我们有一个使用struts2,spring和hibernate开发的web应用程序。

该应用程序需要一个用户只能从一个浏览器登录的功能。

假如用户x,登录到pc-1浏览器ff,那么他就无法从任何其他地方登录。

我通过实现会话映射尝试了它并将会话存储在全局映射中,但是当用户注销并尝试再次登录时,这会失败。

即使它没有严重失败,如果用户没有注销和会话超时,但地图没有被清除。

任何更好的想法来实现此功能。

我们不希望阻止用户登录,但不希望用户通过允许用户共享信用并允许具有相同登录的多个用户发生来利用该应用程序。

答案

由于您已经在使用Spring,我建议您将应用程序与Spring Security集成。

Spring安全性允许您同时定义每个用户允许的最大会话数。

<session-management>
        <concurrency-control max-sessions="1" />
    </session-management>

如果在具有有效会话的用户尝试再次登录时设置,则会通知用户最大并发访问权限设置为1。

阅读更多at

如果弹簧安全性不适合您,那么:

  1. 使用将检查会话有效性的SessionInterceptor,如果会话有效,它将检查用户是否已登录到应用程序(为此,如果发现有效登录,则必须在某处维护会话,例如每次成功登录时为数据库) ,再次将用户重定向到具有自定义消息的登录页面,或者注销已经有效的会话,然后重定向他再次登录。如果您注销早期会话,则意味着该浏览器会话中的任何连续操作都必须处理无效会话。
  2. 如果您在应用程序中也使用Servlet,那么Interceptor将不适合您,在这种情况下,您应该使用Filter并按照上面针对Interceptor详细说明的相同步骤操作。
另一答案

在登录时,为用户提供与用户数据一起存储的生成的ID / cookie(sessionid就足够了)。如果用户使用旧ID / cookie向服务器发出请求,请说他已在其他地方登录。

反过来,禁止新登录尝试,有其缺点 - 正如您所经历的那样。

另一答案

最佳解决方案是在用户登录新会话时从其他会话中注销用户。通常用户在关闭浏览器时不会注销并限制他登录其他窗口将是陷阱。

自动关闭任何以前的用户会话是好的,因为在正常使用中,没有问题,但是当共享登录名和密码时,没有两个人可以同时处理您的应用程序。

另一答案

创建一个地图。在记录时检查用户ID是否存在于该映射中。如果它不存在则将用户id放入map中,在注销时删除该用户id。

另一答案

说实话,我会重新审视您必须将用户限制为单一登录的原因。虽然阻止他们从两个不同的浏览器登录是很容易的 - 提供的任何建议都可行 - 如果可以的话,Spring Security选项最容易实现 - 当用户在同一个用户打开第二个标签时它们都会崩溃浏览器。这被认为是同一会议的一部分。

另一答案

在servlet上下文中维护用户堆栈,因为它将是web容器的一个。在用户登录之前执行检查,如果在servlet上下文中找到用户名将其重定向到登录页面。

另一答案

您应该做的就是在数据库userprofile表中添加一个字段,说明:alreadyLogin。如果用户登录,请将其设为Y.如果用户注销,请将其设为N.现在,每当用户尝试从新位置登录时,如果值为Y,请检查此值并阻止登录。

windowswindowsserver2008远程桌面只允许同时存在一个会话

...。2、终端服务器授权模式:点右键,属性。常规,限制每个用户只能使用一个会话,掉勾,确定。3、防止恶搞,阻止远程用户终止控制台管理员运行-gpedit.msc,计算机配置-管理模板-Windows组件-终端服务。终端服务器-连接。配置... 查看详情

限制每个用户的并发 wcf 会话数

】限制每个用户的并发wcf会话数【英文标题】:Restrictnumberofconcurrentwcfsessionsperuser【发布时间】:2011-06-2419:55:02【问题描述】:我有一个基于会话且安全的WCF服务(可能会使用联合安全性)。我希望每个用户只允许1个并发会话。... 查看详情

为什么每个jvm只允许一个sparkcontext?(代码片段)

在采访中询问了这个问题,每个JVM允许创建多少个sparkcontexts,为什么?我知道每个jvm只允许一个sparkContext,但是无法理解为什么?有谁请帮助我理解“每个jvm一个sparkcontext”背后的原因?答案答案很简单-它没有设计用于多个上... 查看详情

会话管理(代码片段)

...个过程称之为一个会话。会话过程中要解决的一些问题?每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。例如:用户点击超链接通过一个servlet购买了... 查看详情

允许每个用户的单个会话 IdentityServer4

】允许每个用户的单个会话IdentityServer4【英文标题】:AllowsinglesessionperuserIdentityServer4【发布时间】:2021-06-1618:40:47【问题描述】:使用IdentityServer4,我每次需要允许一个用户会话。如果用户使用设备A进行身份验证,然后使用B进... 查看详情

只允许指定用户访问页面

...们自己的乐队页面的页面时遇到了问题。我的波段表中的每个波段都有四列$bandm1$bandm2$bandm3和$bandm4。我尝试制作一个脚本来绘制会话用户名,然后从url中绘制band_id,并且成功。但是当我尝试时:脚本不工作 查看详情

适当的 HTTP 状态代码,适用于每个用户只允许提交一次的情况

】适当的HTTP状态代码,适用于每个用户只允许提交一次的情况【英文标题】:AppropriateHTTPstatuscodeforcasewhenonlyonesubmissionperuserisallowed【发布时间】:2016-01-2016:53:08【问题描述】:我正在为我的API设计一个端点,每个用户只允许提... 查看详情

PHP 会话只使用一个密码字段(没有用户名)?

】PHP会话只使用一个密码字段(没有用户名)?【英文标题】:PHPSessionusingonlyasinglePASSWORDfield(nousername)?【发布时间】:2011-09-1806:38:29【问题描述】:我一直在网上搜索有关创建脚本的好教程,该脚本允许某人使用“输入密码”... 查看详情

提醒用户会话被并发登录替换

...具有相当标准设置的spring安全应用程序。目前我们只允许每个主体1个会话,拒绝同一主体的其他登录,直到第一个会话注销或过期(maximumSessions=1,excpeptionIfMaximumExceeded=true) 查看详情

Sql Server 只允许每个用户使用一个活动图像

】SqlServer只允许每个用户使用一个活动图像【英文标题】:SqlServeronlyallowoneactiveimageperuser【发布时间】:2013-07-1301:33:51【问题描述】:我正在尝试添加到我们有tblUsers表的现有数据库中。截至目前,我们将用户图像存储在文件系... 查看详情

使用cookie进行会话管理(代码片段)

...为有状态会话。二、会话过程中要解决的一些问题?  每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些 查看详情

javaweb学习——会话技术(代码片段)

...话的特点:包含多个请求,一次完整的会话是只针对一个用户。3.会话机制:web中常用的技术,用来跟踪用户的整个会话,常用的会话跟踪技术有Cookie和session。  Cookie通过在客户端记录信息,确定用户的身份。  session通过... 查看详情

text每个模块只允许一次默认导出(代码片段)

查看详情

Gmail 推送通知错误(每个开发人员只允许一个用户推送通知客户端)

】Gmail推送通知错误(每个开发人员只允许一个用户推送通知客户端)【英文标题】:Gmailpushnotificationerror(Onlyoneuserpushnotificationclientallowedperdeveloper)【发布时间】:2015-10-2108:35:54【问题描述】:我尝试在我的两个gmail帐户上执行gma... 查看详情

七:使用session进行会话管理(代码片段)

一、Session简单介绍  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览... 查看详情

守护进程(代码片段)

...护进程进程组是一组进程的集合,进程组由进程组PID表示每个进程除了进程id之外,还必须有一个进程组id,即必须属于某个进程组每个进程组都有一个组长,其进程id就作为进程组id,它不受进程组长的退出影响。一般来说,一个终端... 查看详情

ejb和同步

...是实例值而没有同步问题的原因。另一答案无状态bean:每个线程/请求都将从池中获取不同的EJB实例。SLB不应该保存任何用户会话数据,任何状态。可以并行执行相同的代码。一个线程一次访问一个实例。为用户会话同步Statefullb... 查看详情

你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?(代码片段)

 Lock读写锁机制可以实现! 在Java中Lock接口比synchronized块的优势是什么? Lock接口最大的优势是为读和写分别提供了锁。1importjava.text.SimpleDateFormat;2importjava.util.Date;3importjava.util.Random;4importjava.util.concurrent.lock 查看详情