2012-08-08 62 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