我如何获得Spring Security SessionRegistry?

问题描述 投票:4回答:2

我似乎找不到如何在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,但不确定如何使用名称空间公开它。每次执行该操作时,会话注册表都为null。

有人能指出我在这里做错了什么,还是给我示范一个例子?

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

java session spring-security struts2
2个回答
1
投票

不确定您是否参考了Spring Security参考文档中的Session Management部分。它具有将名称空间和自定义bean结合在一起的代码段。


3
投票

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

  1. session-registry-alias。
  2. session-registry-ref。

官方文档中每个属性的描述:

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

session-registry-ref。用户可以使用以下命令提供自己的SessionRegistry实现session-registry-ref属性。其他并发会话控制豆将被连接起来以使用它。

© www.soinside.com 2019 - 2024. All rights reserved.