我如何获得 Spring Security SessionRegistry?

Gri*_*iff 5 java session struts2 spring-security

我似乎无法找到如何在 Struts 操作中获取对 Spring Security (V3) SessionRegistry 的引用。

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

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 @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;
}
Run Code Online (Sandbox Code Playgroud)

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>    
Run Code Online (Sandbox Code Playgroud)

一般来说,我更愿意自己连接 Spring bean,但不确定如何使用命名空间公开它。每次执行操作时,会话注册表都为空。

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

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

Rag*_*ram 2

不确定您是否参考过Spring Security 参考文档中的会话管理部分。它有一个结合命名空间和自定义 bean 的片段。