如果您不知道, Spring安全性可能会限制用户可以拥有的会话数。 如果要开发Web应用程序,尤其是Java JEE中的安全Web应用程序 ,则必须提出与在线银行门户相似的要求,例如, 每个用户一次只能有一个会话,或者每个用户没有并发会话 。 即使您也可以在不使用Spring安全性但使用Spring安全性的情况下实现此功能,它只是小菜一碟:)。 您只需要在spring安全配置文件中添加几行XML,就可以完成。 为了实现此功能,可以使用<concurrency-control>
标记。 您可以配置应用程序支持的最大会话数,然后Spring安全性将自动检测用户是否违反了限制,并将其定向到您使用此标记指定的无效会话URL,例如定向到注销页面。
与此类似, Spring Security提供了许多现成的功能,这是authentication
, authorization
, session management
, password encoding
, secure access
, session timeout
等所需的安全企业或Web应用程序。
在我们的Spring安全性示例中,我们看到了如何使用Spring安全性在Active Directory中执行LDAP身份验证,并且在此Spring安全性示例中,我们将看到如何限制Java Web应用程序中用户可以拥有的会话数或如何限制并发用户会话。
Spring Security示例:限制用户会话数
就像我说的那样,当您使用spring安全框架或库时,这很容易。 实际上,所有内容都是声明性的,不需要任何代码即可启用并发会话以禁用功能 。
您将需要在您的Spring Security Configuration文件中包含以下xml片段,该片段主要命名为
applicaContext-security.xml
。 这是示例Spring安全性限制Java Web应用程序中用户会话的示例 :
<session-management invalid-session-url="/logout.html"><concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>
如您所见,您可以指定每个用户允许多少个并发会话 ,最安全的系统(如在线银行门户)仅允许每个用户一个经过身份验证的会话。
您甚至可以指定一个URL,如果用户提交无效的会话标识符,则该用户将被带到该URL,该URL可用于检测会话超时。 session-management
元素用于捕获与会话相关的内容。
Max-session
指定允许多少个并发身份验证会话,如果将error-if-maximum-exceeded
Max-session
error-if-maximum-exceeded
设置为true,则在用户尝试登录另一个会话时将标记错误。
例如,如果您尝试从浏览器两次登录到该Spring Security应用程序,那么您将收到一条错误消息,指出“此主体超过最大会话数为1” ,如下所示:
相依性
此代码依赖于spring-security框架。 您需要下载spring安全罐(例如spring-security-web-3.1.0.ja
r)并将其添加到应用程序classpath中 。
这个简单的Spring Security示例展示了Spring Security的强大功能,一小段xml代码段可以在Java Web应用程序中添加非常有用且方便的安全功能 。
我强烈建议对使用Servlet JSP创建的新Java Web应用程序或现有Java Web应用程序使用spring security。
这就是如何在Java Web应用程序中使用Spring Security限制用户会话数的全部内容。 让我知道您在项目中实施此安全功能时是否遇到任何问题。
翻译自: https://www.javacodegeeks.com/2018/04/spring-security-concurrent-session-control-example-tutorial-how-to-limit-number-of-user-session-in-java-jee-web-application.html