0

我目前正在使用 shiro 和 Tapestry-security 插件来管理本机会话和持久化数据。获取会话时一切正常SecurityUtils.getSubject().getSession()。然而,这意味着应用程序中充斥着特定于 shiro 的代码片段。由于 shiro 使用 servlet 会话 API,有没有办法以对应用程序透明的方式执行此操作,并希望仍然允许我使用和之类的@Persist注释@SessionState

4

2 回答 2

2

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

@Inject
private HttpServletRequest httpRequest;

httpRequest.getSession();

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

于 2012-08-10T12:48:53.453 回答
0

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

于 2012-08-10T16:00:16.450 回答