我如何获得Spring Security SessionRegistry?

时间:2010-10-07 22:15:14

标签: java session spring-security struts2

我似乎无法找到如何在struts动作中引用Spring Security(V3)SessionRegistry。

我在我的web.xml文件中配置了监听器:

    <listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

我尝试使用@Autowired注释将其引入动作:

@Autowired
private SessionRegistry sessionRegistry;

@Override
public String execute() throws Exception {
    numberOfUsersLoggedin= sessionRegistry.getAllPrincipals().size();
    return SUCCESS;

}


public SessionRegistry getSessionRegistry() {
    return sessionRegistry;
}

public void setSessionRegistry(SessionRegistry sessionRegistry) {
    this.sessionRegistry = sessionRegistry;
}

http配置如下所示:

    <session-management invalid-session-url="/public/login.do?login_error=expired"
        session-authentication-error-url="/public/login.do" 
        session-fixation-protection="newSession">
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
    </session-management>    

一般来说,我自己更喜欢连接spring bean,不确定如何使用命名空间暴露它。每次执行操作时,会话注册表都为空。

有人能指出我在这里做错了什么,或者告诉我一个例子的方法?

提前感谢任何/所有回复!

2 个答案:

答案 0 :(得分:3)

如果按命名空间配置Spring Security, concurrency-control 标记的以下属性可用于访问SystemRegistry:

  1. 会话注册表的别名。
  2. 会话注册表的参考文献
  3. 官方文档中每个属性的描述:

      

    <强>会话注册表的别名。   引用内部会话也很有用   注册表,用于您自己的bean或管理界面。您可以   使用session-registry-alias属性公开内部bean,   给它一个名称,你可以在你的配置中的其他地方使用。

         

    <强>会话注册表-REF 即可。   用户可以使用。提供自己的SessionRegistry实现   session-registry-ref属性。另一个并发会话控制   bean将被连线使用它。

答案 1 :(得分:1)

不确定您是否在Spring Security参考文档中引用了Session Management部分。它有一个组合命名空间和自定义bean的片段。