如何在Spring Security 3.0.5中获取所有应用程序的在线用户?

时间:2013-04-06 10:40:30

标签: session spring-security

当我为

进行实施时
  

org.springframework.security.core.userdetails.UserDetailsS​​ervice

并使用语句

  

sessionRegistry.registerNewSession(user.getUsername(),user);

成功验证后,在其中

  

sessionRegistry.getAllPrincipals();

列表不为空(但是当我从应用程序注销时,会话仍然在列表中),否则此列表将为空。如何在sessionRegistry中自动进行会话注册(以及在用户注销或会话到期期间注销)?我的春季配置如下:

<sec:http auto-config="true" use-expressions="true" access-denied-page="/accessDenied.jsf">
    <sec:form-login login-page="/login.jsf" />
    <sec:session-management session-authentication-strategy-ref="sas" />
</sec:http>

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

<bean id="scr"
class="org.springframework.security.web.context.HttpSessionSecurityContextRepository" />

<bean id="smf"
class="org.springframework.security.web.session.SessionManagementFilter">
<constructor-arg name="securityContextRepository"
    ref="scr" />
<property name="sessionAuthenticationStrategy"
    ref="sas" />
</bean>

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

1 个答案:

答案 0 :(得分:1)

您很可能忘记添加HttpSessionEventPublisher to your web.xml

另一种可能性是,有问题的委托人还有其他会议仍然有效,但没有超时或无效。您的最大会话值为10.尝试将其设置为“1”而不是进行测试。

此外,版本3.0.5已过期。您应该使用最新版本并及时更新补丁以避免漏洞。