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