属性 <beans:property name="maximumSessions" value="1" /> 不起作用

Posted

技术标签:

【中文标题】属性 <beans:property name="maximumSessions" value="1" /> 不起作用【英文标题】:Property <beans:property name="maximumSessions" value="1" /> doesn't work 【发布时间】:2012-11-26 13:35:41 【问题描述】:

我想限制用户的会话数。

这是我使用的示例配置(采用here):

<http>
  <custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrencyFilter" />
  <custom-filter position="FORM_LOGIN_FILTER" ref="myAuthFilter" />

  <session-management session-authentication-strategy-ref="sas"/>
</http>

<beans:bean id="concurrencyFilter"
   class="org.springframework.security.web.session.ConcurrentSessionFilter">
  <beans:property name="sessionRegistry" ref="sessionRegistry" />
  <beans:property name="expiredUrl" value="/session-expired.htm" />
</beans:bean>

<beans:bean id="myAuthFilter" class=
   "org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
  <beans:property name="sessionAuthenticationStrategy" ref="sas" />
  <beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>

<beans:bean id="sas" class=
 "org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy">
  <beans:constructor-arg name="sessionRegistry" ref="sessionRegistry" />
  <beans:property name="maximumSessions" value="1" />
</beans:bean>

<beans:bean id="sessionRegistry"
    class="org.springframework.security.core.session.SessionRegistryImpl" />

我没有收到任何错误,并且可以看到 SessionRegistry 中的用户数。但是maximumSessions 的值是1,我可以为一个用户创建 2 个会话(为此我使用了不同的浏览器)。

以下属性也没有导致任何异常:&lt;beans:property name="exceptionIfMaximumExceeded" value="true" /&gt;。我还尝试为 UserDetails 实现覆盖 equals()hashCode()(建议 here)。

为什么我可以使用此maximumSessions 值为一个用户登录两次?我应该以其他方式限制会话数吗?任何建议将不胜感激,在此先感谢。

【问题讨论】:

【参考方案1】:

我的错,我没有正确地使用 EqualsBuilder 覆盖 equals 方法。正如here 所示,在实际需要比较之前我有.appendSuper(super.equals(obj)) 行,因此即使是相同的用户详细信息也会有所不同。没有这条线一切都很好,我无法登录两次。

【讨论】:

以上是关于属性 <beans:property name="maximumSessions" value="1" /> 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

InternalResourceViewResolver视图处理器

TableView:调整可见行数

搭建后台页面布局利用属性target 属性

Spring Boot – 自定义PropertyEditor

禁用属性不适用于选择标签上的必需属性

jquery复选框属性