我正在使用Spring安全性進行身份驗證的Spring + struts2 + hibernate集成。這裏是application-security.xml
文件:如何在會話中存儲userId,以便下一個資源能夠在Spring安全中訪問它
<http>
<intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/**" filters="none" />
<form-login login-page="/login.jsp" default-target-url="/homePage.action" authentication-failure-url="/login-fail.jsp"/>
<logout logout-success-url="/logged_out.jsp" />
</http>
的問題是,當用戶通過認證,並請求被轉發到/homePage.action
,我沒能獲得在homePage.action
類(在Struts Action類)userid
。
下面是代碼:
UserDetails userDetails = (UserDetails)
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
調試的代碼,結果發現,當請求被轉發到/homePage.action
,SecurityContextHolder
值被清除。
有沒有什麼辦法可以讓可用於homepage.action
類?
我搜查了很多,但無法定稿。似乎我必須編寫一些自定義篩選器實現並掛鉤到Spring安全篩選器鏈中(以便會話管理僅在spring級別完成)。
任何人都可以給一些指針嗎?
我想,如果用戶已經正確地驗證SecurityContextHolder的值不應被清除的是彈簧過濾鏈也得到應用。所有網址的filters =「none」? – 2012-08-10 14:12:25
SecurityContextHolder在用戶驗證成功後確實持有UserDeatails。所有URL的filters =「none」都會導致spring security被繞過,因此我們無法調用任何與安全相關的方法。 – Atul 2012-08-11 09:28:33
您應該在您的問題中澄清爲什麼您需要登錄表單而不是完全不安全的應用程序。此外,該配置會繞過登錄提交URL。你真的可以登錄嗎?當你提交登錄表單時,你沒有得到404嗎? – 2012-08-19 15:32:48