在我的 JSF 应用程序中,我获取当前登录用户的名称,如下所示......
public String getLoggedInUsername() {
return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
...我检查用户是否像这样登录...
public boolean isSignedIn() {
return (getLoggedInUsername() != null);
}
...当用户退出时,我这样做...
public String doLogout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
httpSession.invalidate();
return "main";
}
我的问题是在 doLogout() 之后, getLoggedInUser name() 样式返回登录用户的名称。我应该做什么来确保 getRemoteUser() 在注销后返回 null ?
或者,是否有比仅检查用户名更好的方法来获取 if isSignedIn() ?
谢谢!
抢
确保在使会话无效后重定向请求。用户主体是根据会话属性解析的。因此,当您只是转发到目标页面时(就像 JSF 导航情况默认情况下所做的那样),它仍然会出现在目标页面中,因为它使用same HttpSession
参考。重定向指示 Web 浏览器触发全新的 HTTP 请求,从而强制服务器重新创建HttpSession
根据新的要求进行参考。
Add <redirect/>
到导航案例以强制 JSF 发送重定向。或者当您已经使用 JSF 2.0 时,添加?faces-redirect=true
到结果值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)