【问题标题】:How to fix apache shiro unknown session exception on logout action如何在注销操作时修复 apache shiro 未知会话异常
【发布时间】:2019-09-18 01:50:11
【问题描述】:

为了安全,我使用 Jdeveloper 12.1.3 版本、Glassfish 服务器 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 "";
}

我有什么想念的吗?

【问题讨论】:

    标签: oracle-adf glassfish-3 shiro


    【解决方案1】:

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

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

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

    【讨论】:

    • 不,同样的异常“UnknownSessionException”
    • 您的注销路线上有哪些 Shiro 过滤器?
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2013-06-01
    • 2021-07-14
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2018-05-02
    相关资源
    最近更新 更多