首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shiro HttpSession in SessionListener?

Shiro HttpSession in SessionListener?
EN

Stack Overflow用户
提问于 2014-01-17 09:47:44
回答 1查看 2.3K关注 0票数 4

我正在尝试取代我的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

代码语言:javascript
复制
// HttpServletRequest currentRequest;
// ServletContext servletContext;
// Session session;
HttpSession httpSession = new ShiroHttpSession(session, currentRequest, servletContext);

但是,无法从Shiro HttpServletRequest访问servletContext和SessionListener

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

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

回答 1

Stack Overflow用户

发布于 2014-01-20 04:05:23

为什么旧的javax.servlet.http.HttpSessionListener不再被调用?

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

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

你不应该也不应该。

如果你解释一下你想用HttpSession做什么,我们也许能找到替代方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21182660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档