如何修复注销操作上的阿帕奇希罗未知会话异常



我有使用 Jdeveloper 12.1.3 版本、Glassfish server 3.1.2 版本和 Apache Shiro 开发 ADF Web 应用程序以确保安全。

登录操作和应用程序安全性工作正常,但注销操作无法正常工作。

从应用程序注销后,应将其重定向到登录页面。但它抛出

"javax.servlet.ServletException: java.lang.IllegalStateException: org.apache.shiro.session.UnknownSessionException: 没有会话 带有 id"错误。

注销操作方法代码为

public String logout() throws IOException {
    try {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        externalContext.invalidateSession();
        SecurityUtils.getSubject().logout();
    } catch (Exception e) {
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        e.printStackTrace(); // TODO: logger.
    }
    return "";
}

我错过了什么吗?

看起来您使会话无效,然后调用注销。 您是否尝试过先注销?或类似的东西:

Subject subject = SecurityUtils.getSubject();
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.invalidateSession();
subject.logout();

否则,您似乎正在尝试从空会话中获取当前主题。

最新更新