【问题标题】:How do I get the Spring Security SessionRegistry?如何获取 Spring Security SessionRegistry?
【发布时间】:2011-04-22 14:58:33
【问题描述】:

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

谁能指出我在这里做错了什么,或者告诉我如何举个例子?

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

【问题讨论】:

    标签: java session spring-security struts2


    【解决方案1】:

    如果您通过命名空间配置 Spring Security,concurrency-control 标签的以下属性对于访问 SystemRegistry 可能很有用:

    1. 会话注册别名。
    2. session-registry-ref.

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

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

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

    【讨论】:

      【解决方案2】:

      不确定您是否参考过 Spring Security 参考文档中的 Session Management 部分。它有一个 sn-p 组合命名空间和自定义 bean。

      【讨论】:

      • 感谢您的链接。我将 sessionRegistry bean 添加到我的 Spring 配置中,它在 Struts 操作中不再为空。但是,当我尝试获取登录用户数(登录时)时 sessionRegistry.getAllPrincipals().size(); 的值始终为 0。我在阅读文档吗?如果我使用的是自定义登录表单(我正在使用 LDAP 进行身份验证),我似乎无法使用上面指定的命名空间/自动配置会话管理。看来我必须手动配置所有会话管理和并发控制?
      • 查看在线文档,我似乎无法弄清楚 myAuthFilter 的身份验证提供程序的名称是什么。我正在使用不提供 bean id 的命名空间 ...
      • 有点死神,但getAllPrincipals().size()总是为我返回零。你是如何设法让它工作的?你有自己的SessionRegistry 实现类吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2016-05-14
      • 2015-09-12
      • 2018-03-08
      • 2018-12-16
      • 2014-01-28
      • 1970-01-01
      相关资源
      最近更新 更多