Shiro:无法使 HttpSession 无效

Posted

技术标签:

【中文标题】Shiro:无法使 HttpSession 无效【英文标题】:Shiro: Cannot invalidate HttpSession 【发布时间】:2015-10-30 21:35:33 【问题描述】:

我有一个 Shiro 会话 (id=11111) 和一个 http 会话 (id=22222)。

当我尝试使 HttpSession 无效时,使用了错误的 id。

代码:

公共无效注销() SecurityUtils.getSubject().logout(); // 在这一行抛出异常 FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

例外:

java.lang.IllegalStateException: org.apache.shiro.session.UnknownSessionException: 没有 ID 为 [22222] 的会话

如何使 HttpSession 无效,或者设置正确的 id?

【问题讨论】:

完整的堆栈跟踪会很有用 【参考方案1】:

通过实现 HttpSessionBindingListener 并创建 Shiro 会话到 http 会话的映射解决了这个问题。

【讨论】:

【参考方案2】:

SecurityUtils.getSubject().logout() 停止 DefaultSecurityManager.logout(Subject subject) 中的会话并使会话无效。所以在 logout() 调用后会话不能失效。

【讨论】:

以上是关于Shiro:无法使 HttpSession 无效的主要内容,如果未能解决你的问题,请参考以下文章

使Java HTTP会话无效以重定向到其他服务器,而无需将用户注销

怎么获取httpsession对象

如何在 JSF 2.0 中使会话无效?

每个用户的最大用户会话数 - apache shiro

spring-boot redis:如何使用户的所有会话无效?

shiro中realm注入service方法无效