Java SessionListener中的Shiro HttpSession?

Java SessionListener中的Shiro HttpSession?,java,session,tomcat,servlets,shiro,Java,Session,Tomcat,Servlets,Shiro,我正在尝试将我的webapp的会话管理(目前由Catalina/Tomcat处理)替换为shiro本机会话管理 这应该是一项相当容易的工作,正如shiro网站所宣传的: 透明的HttpSession支持-如果您使用Shiro的本机 在会话中,我们实现了HTTP会话API和Servlet2.5API 因此,您无需更改任何现有的web代码即可使用 西罗 因此,之后,您用Shiro的DefaultWebSessionManager替换了本地会话管理器,一切都应该开箱即用 我的webapp也是如此,除了

我正在尝试将我的webapp的会话管理(目前由Catalina/Tomcat处理)替换为shiro本机会话管理

这应该是一项相当容易的工作,正如shiro网站所宣传的:

透明的HttpSession支持-如果您使用Shiro的本机 在会话中,我们实现了HTTP会话API和Servlet2.5API 因此,您无需更改任何现有的web代码即可使用 西罗

因此,之后,您用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
会话
可以转换为
HttpSession

// HttpServletRequest currentRequest;
// ServletContext servletContext;
// Session session;
HttpSession httpSession = new ShiroHttpSession(session, currentRequest, servletContext);
但是,无法从Shiro
SessionListener
访问HttpServletRequest和servletContext

你能回答这两个问题中的一个吗

  • 为什么旧的
    javax.servlet.http.HttpSessionListener
    不再存在 打电话
  • 如何将Shiro
    Session
    对象转换为
    HttpSession
    shiro
    会话列表中的对象
  • 为什么旧的
    javax.servlet.http.HttpSessionListener
    不再存在 打电话

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

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

    你没有,也不应该


    如果您解释一下您想用
    HttpSession
    做什么,我们可能会找到替代方案。

    Simpy put,我的旧SessionListener中的所有代码都是为使用HttpSessions编写的。我如何重用这些代码而不必全部重构以使用Shiro会话对象?这将是相当多的工作。@karstendamen您使用的是什么
    HttpSession
    方法?Shiro的
    会话
    也有属性设置器和获取器,但很明显这些都不适用于JSP等。