更改tapestry中的默认会话行为

时间:2012-08-08 12:08:56

标签: tapestry

我目前正在使用shiro和tapestry-security插件来管理本机会话并保留数据。通过SecurityUtils.getSubject().getSession()获取会话时,一切正常。但是,这意味着应用程序中充满了特定于shiro的代码片段。由于shiro使用servlet会话API,有没有办法以对应用程序透明的方式执行此操作,并且希望仍允许我使用@Persist@SessionState等注释?

2 个答案:

答案 0 :(得分:2)

我可能误解了您的问题,但您可以注入请求并使用它来处理会话:

@Inject
private HttpServletRequest httpRequest;

httpRequest.getSession();

这不会阻止您使用@Persist@SessionState

答案 1 :(得分:0)

我装饰了TapestrySessionFactory以返回一个shiro会话而不是包装的HttpServletSession。界面不相同,因此需要(非常)简单的强制函数。我得到了我所需要的:唯一与shiro相关的代码由AppModule中的几行和一个将org.apache.shiro.session.Session转换为org.apache.tapestry5.services.Session的独立函数组成。在应用程序的其余部分,我像以前一样使用会话工具(包括注释),并且它们都是由shiro在幕后管理。