【发布时间】:2011-08-01 09:00:18
【问题描述】:
我还没有找到这个问题的真正解决方案,即使它真的很常见......
我有这样的背景:
- 在 Glassfish Server v3.1、JDK6 上运行的 JSF 应用程序。全部在我的带有 WinVista 的个人计算机中(最后一个应该不重要)。
- 使用 SSL 和基本身份验证(容器的安全性)
- 我在后台 bean 中完成了 logout() 方法,使会话无效并发送重定向。
我不能让容器再次显示登录框来验证用户,并且能够更改用户......我的用户总是可以返回,在浏览器中按 BACK 按钮或只写 URL,并在假定不应该存在现有会话时继续在那里进行操作。
我正在获取创建我的支持 bean 的用户的名称:
private void setName() {
this.name = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();
}
而且我用这个名字来执行操作……
然后注销我的 xhtml 有代码:
<h:panelGroup id="logOut">
<h:form>
<h:commandLink id="linkLogOut" action="#{visitor.logout}" value=" Clic here to Log Out" />
</h:form>
</h:panelGroup>
在我的 bean 中调用这个方法::
public void logout() throws IOException {
// FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
this.name = null;
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession)fc.getExternalContext().getSession(false);
session.invalidate();
FacesContext.getCurrentInstance().getExternalContext().redirect("https://localhost:8080/");
}
我声明我的支持 bean:
@Named(value="visitor")
@SessionScoped
...我也在从部署描述符中进行重定向...而且是一样的。
如果我关闭浏览器,会话将丢失,并且容器会再次向我询问用户/密码。
有什么建议吗?
非常感谢!
亚历杭德罗。
【问题讨论】: