SessionListener中的Shiro HttpSession?

时间:2014-01-17 09:47:44

标签: java session tomcat servlets shiro

我正在尝试将我的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。

如何解决此问题的任何想法,例如你能回答这两个问题中的一个吗?

  1. 为什么旧的javax.servlet.http.HttpSessionListener不再存在 叫?
  2. 如何将Shiro Session对象转换为HttpSession shiro中的对象SessionListener

1 个答案:

答案 0 :(得分:3)

  

为什么旧的javax.servlet.http.HttpSessionListener不再存在   叫?

正如您所解释的,会话管理现在通过Shiro而不是通过Servlet容器来处理。因此,即使您的HttpSessionListener已注册,您的Servlet容器也不会创建任何HttpSession个对象,因此不会使用任何HttpSessionListener回调。

  

如何将Shiro Session对象转换为HttpSession个对象   shiro SessionListener

你没有,你不应该。

如果你解释一下你想对HttpSession做些什么,我们或许可以找到替代方案。