Shiro 登出页面:“没有带有 id 的会话” - Shiro

问题描述

我想从我的 p:commandButton 正常注销:

我的后端 bean 中有这个函数

public void logout() {
            SecurityUtils.getSubject().logout();
            
            SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(Faces.getRequest());

            if (savedRequest == null) {
                Faces.redirect("/common/login.jsf");
            } else {
                Faces.redirect(savedRequest.getRequestUrl());
            }
}

但我明白了:

引起:org.apache.shiro.session.UnkNownSessionException:没有ID为[b4a41562-0d9e-4fc9-9d9d-ef7724d8efad]的会话

知道如何解决这个问题吗? 我也在使用 Omnifaces 库。

知道出了什么问题吗?

我正在使用: Shiro 1.7.0 和 Omnifaces 3.10.1

解决方法

Shiro 的 Subject.logout() 实质上清除了会话 (session.invalidate())。如果会话已被清除,您将无法再次清除它。

如果您使用的是 Shiro's Logout Filter,则无需额外调用 logout()