为了安全起见,我有使用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 "";
}
我想念什么吗?
答案 0 :(得分:0)
您似乎使会话无效,然后调用注销。您是否尝试过先注销?或类似的东西:
Subject subject = SecurityUtils.getSubject();
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.invalidateSession();
subject.logout();
否则,您似乎正在尝试从空会话中获取当前主题。