2010-10-07 58 views
4

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

我已经配置了监听器里我的web.xml文件:

​​

而且我试图用@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>  

一般来说,我更舒服地连接春豆自己,不知道如何使用命名空间暴露这种情况。每次执行操作时,会话注册表都为空。

任何人都可以指出我在做什么错在这里,或让我看看如何通过一个例子吗?

在此先感谢任何/所有回复!

回答

1

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

+0

感谢您的链接。我将sessionRegistry bean添加到了我的Spring配置中,并且它在Struts操作中不再为空。但是,当我尝试获取登录用户的数量(登录时)时,sessionRegistry.getAllPrincipals()。size()的值;总是0.我正在阅读文档吗?这似乎是如果我使用自定义登录表单(我是 - 对LDAP进行身份验证),我不能使用上面指定的名称空间/自动配置会话管理。似乎我必须手动手动配置所有会话管理和并发控制? – Griff 2010-10-08 17:02:25

+0

看着在线文档,我似乎无法弄清楚我的身份验证提供程序的名称是myAuthFilter的。我使用的命名空间不提供bean id ... \t Griff 2010-10-08 18:38:41

3

如果你被命名空间配置Spring安全,并发控制的以下属性标签可用于访问SystemRegistry有用:

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

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

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

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

相关问题