如何在注销操作上修复apache shiro未知会话异常

问题描述 投票:1回答:1

我有使用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个回答
0
投票

看起来您使会话无效然后调用logout。你有没有尝试先退出?或类似的东西:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.