【发布时间】:2014-02-06 14:12:54
【问题描述】:
我正在尝试将我的 webapp 的会话管理(目前由 Catalina/Tomcat 处理)替换为 shiro 本机会话管理。
这应该是一项相当容易的工作,正如 shiro 网站所宣传的那样:
透明的 HttpSession 支持 - 如果你使用 Shiro 的原生 会话,我们已经实现了 HTTP 会话 API 和 Servlet 2.5 API 因此您无需更改任何现有的网络代码即可使用 四郎。
所以之后,您将本地会话管理器替换为 Shiro 的 DefaultWebSessionManager,一切都应该开箱即用。
我的webapp也是这样,除了某个javax.servlet.http.HttpSessionListener。自从使用 Shiro 的会话管理后,此侦听器不再获取事件。
我想不用担心! Shiro 提供了它自己的org.apache.shiro.session.SessionListener 接口,可以链接到会话管理器。
但是,这个界面与javax.servlet.http.HttpSessionListener 有很大不同。不再传递 HttpSession 对象,而是 Shiro 侦听器将其自己的 org.apache.shiro.session.Session 对象与事件一起传递。
我现有的实现当然只适用于HttpSession 对象。我发现 Shiro Session 可以转换为 HttpSession:
// HttpServletRequest currentRequest;
// ServletContext servletContext;
// Session session;
HttpSession httpSession = new ShiroHttpSession(session, currentRequest, servletContext);
但是没有办法从 Shiro SessionListener 访问 HttpServletRequest 和 servletContext。
如何解决这个问题的任何想法,例如你能回答这两个问题之一吗?
- 为什么旧的
javax.servlet.http.HttpSessionListener不再是 叫什么? - 如何将 Shiro
Session对象转换为HttpSessionshiro 中的对象SessionListener?
【问题讨论】:
标签: java session tomcat servlets shiro