2010-10-07 276 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將被連接起來使用它。