2012-08-08 24 views
0

我目前使用shiro和tapestry-security插件來管理本地會話並保留數據。當通過SecurityUtils.getSubject().getSession()獲得會話時,一切正常。但是,這意味着該應用程序充斥着shiro特定代碼的碎片。由於shiro使用servlet會話API,有沒有辦法以對應用程序透明的方式來做到這一點,並希望仍然允許我使用註釋,如@Persist@SessionState更改掛毯中的默認會話行爲

回答

0

我裝飾TapestrySessionFactory返回shiro會話,而不是包裝HttpServletSession。界面並不完全相同,因此需要一個(非常)簡單的強制功能。我得到了我所需要的:與shiro相關的唯一代碼由AppModule中的幾行代碼和一個將org.apache.shiro.session.Session轉換爲org.apache.tapestry5.services.Session的獨立函數組成。在應用程序的其餘部分,我像以前一樣使用會話功能(包括註釋),並且他們都在後臺由shiro管理。

2

我可能誤解了你的問題,但你可以注入的請求,並用它來獲得對會話的句柄:

@Inject 
private HttpServletRequest httpRequest; 

httpRequest.getSession(); 

這不使用@Persist@SessionState阻止你。

+0

我的問題是我根本不想使用servlet httpSessions。現在解決它,但謝謝。 – 2012-08-10 16:01:39