我正在尝试取代我的webapp的会话管理(目前由Catalina/Tomcat处理),以避免本地会话管理。
这应该是一项相当容易的工作,正如shiro网站所刊登的那样:
透明的HttpSession支持--如果您正在使用Shiro的本地会话,我们已经实现了HttpSession API和Servlet2.5API,因此您不必更改任何现有的web代码来使用Shiro。
因此,之后,您用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 HttpServletRequest访问servletContext和SessionListener。
你能回答这两个问题中的一个吗?
javax.servlet.http.HttpSessionListener不再被调用?Session对象转换为shiro SessionListener中的HttpSession对象发布于 2014-01-20 04:05:23
为什么旧的
javax.servlet.http.HttpSessionListener不再被调用?
正如您已经解释过的,会话管理现在是通过Shiro而不是通过Servlet容器来处理的。因此,即使注册了HttpSessionListener,Servlet容器也没有创建任何HttpSession对象,因此也没有使用任何HttpSessionListener回调。
如何将Shiro
Session对象转换为shiroSessionListener中的HttpSession对象?
你不应该也不应该。
如果你解释一下你想用HttpSession做什么,我们也许能找到替代方案。
https://stackoverflow.com/questions/21182660
复制相似问题