Java SessionListener中的Shiro HttpSession?
我正在尝试将我的webapp的会话管理(目前由Catalina/Tomcat处理)替换为shiro本机会话管理 这应该是一项相当容易的工作,正如shiro网站所宣传的: 透明的HttpSession支持-如果您使用Shiro的本机 在会话中,我们实现了HTTP会话API和Servlet2.5API 因此,您无需更改任何现有的web代码即可使用 西罗 因此,之后,您用Shiro的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也是如此,除了
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);
但是,无法从ShiroSessionListener
访问HttpServletRequest和servletContext
你能回答这两个问题中的一个吗
javax.servlet.http.HttpSessionListener
不再存在
打电话Session
对象转换为HttpSession
shiro会话列表中的对象
javax.servlet.http.HttpSessionListener
不再存在
打电话
正如您所解释的,会话管理现在是通过Shiro而不是通过Servlet容器来处理的。因此,即使注册了HttpSessionListener
,Servlet容器也不会创建任何HttpSession
对象,因此不会使用任何HttpSessionListener
回调
如何将ShiroSession
对象转换为中的HttpSession
对象
shiroSessionListener
你没有,也不应该
如果您解释一下您想用
HttpSession
做什么,我们可能会找到替代方案。Simpy put,我的旧SessionListener中的所有代码都是为使用HttpSessions编写的。我如何重用这些代码而不必全部重构以使用Shiro会话对象?这将是相当多的工作。@karstendamen您使用的是什么HttpSession
方法?Shiro的会话
也有属性设置器和获取器,但很明显这些都不适用于JSP等。