我正在尝试将我的webapp的会话管理(目前由Catalina / Tomcat处理)替换为shiro本地会话管理。
这应该是一项相当容易的工作,正如shiro网站所宣传的那样:
透明的HttpSession支持 - 如果您使用Shiro的本机 会话,我们已经实现了HTTP Session API和Servlet 2.5 API 因此您无需更改任何现有的Web代码即可使用 四郎。
所以之后,你用Shiro的DefaultWebSessionManager
替换了本地会话管理器,一切都应该开箱即用。
我的webapp也是如此,除了某个javax.servlet.http.HttpSessionListener
。自使用Shiro的会话管理以来,此监听器不再获取事件。
不用担心我的想法! Shiro提供了自己的org.apache.shiro.session.SessionListener
接口,可以链接到会话管理器。
但是,此界面与javax.servlet.http.HttpSessionListener
有很大不同。不再传递HttpSession
个对象,而是Shiro Listener通过事件传递它自己的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
不再存在
叫?Session
对象转换为HttpSession
shiro中的对象SessionListener
?答案 0 :(得分:3)
为什么旧的
javax.servlet.http.HttpSessionListener
不再存在 叫?
正如您所解释的,会话管理现在通过Shiro而不是通过Servlet容器来处理。因此,即使您的HttpSessionListener
已注册,您的Servlet容器也不会创建任何HttpSession
个对象,因此不会使用任何HttpSessionListener
回调。
如何将Shiro
Session
对象转换为HttpSession
个对象 shiroSessionListener
?
你没有,你不应该。
如果你解释一下你想对HttpSession
做些什么,我们或许可以找到替代方案。