2010-09-23 55 views
1

我想在我的spring-jersey bean中檢索安全上下文,但是我一直在獲取Null身份驗證。當我在我的Spring應用程序中運行相同的命令時,它會正確地檢索當前登錄的用戶安全上下文。無法從Spring-Jersey中檢索安全上下文

Spring-Jersey的配置需要爲主應用程序創建一個單獨的servlet,因此web.xml有兩個servlet - 一個用於spring應用程序,另一個用於平臺休息API。

假設問題與此有關,我嘗試將安全上下文共享模式設置爲全局,但是我仍然無法從Jersey中獲取上下文信息。

SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL) 

任何幫助,將不勝感激!

非常感謝, 奈傑爾

回答

2

用戶也許根本就沒有認證的,因爲你的球衣的請求沒有會話cookie,因此不與驗證的用戶會話相關聯?

您可以通過在Spring Security中啓用匿名身份驗證來檢查它 - 如果猜測是正確的,您應該獲得匿名身份驗證而不是null

+0

非常感謝我有匿名認證功能,像你這樣的建議,我本來期望配置的用戶展現出來,但它在新澤西州不一樣。但是,當我未在我的春季應用程序中進行身份驗證時,配置的用戶顯示而不是null! 我可以看到您關於會話cookie的觀點,我可以使用@Context HttpServletRequest req從我的Jersey代碼檢索會話cookie,然後從那裏檢索會話。然而SecurityContextHolder是獨立於我所理解的(?)的會話。 – 2010-09-23 16:35:19

+0

@Nigel:是的,它獨立於會話,但對於經過身份驗證的用戶,它由Spring Security過濾器從會話屬性填充。那麼,您是否使用Spring Security過濾器處理Jersey請求? – axtavt 2010-09-23 16:41:42

+0

感謝您的評論。這個線索幫助我解決了我的問題,檢查我的安全過濾器是如何配置的,我在我的彈簧安全配置中發現了這條線

  
刪除這個問題解決了這個問題,它可以有效地禁用所有彈簧安全過濾器! 非常感謝您的幫助:) – 2010-09-24 08:58:04

0

@axtavt謝謝你的評論。這條線索幫助解決我的問題,檢查我的保安過濾器是如何配置的,我發現在我的春季安全配置

<security:intercept-url pattern="/api/**" filters="none" /> 

該行有效地禁止所有的春季安全過濾器這一行,則刪除此解決了這一問題。

您的幫助:)