刷新/重定向后,JSF HttpSession属性变为null

时间:2017-03-24 14:48:24

标签: jsf httpsession


我正在使用httpsession测试一个简单的登录,因此在我对用户进行身份验证后,我将一个用户属性添加到http会话中:

@ManagedBean
@SessionScoped
public class loginView {
....
  public String connect() {
      FacesContext context = FacesContext.getCurrentInstance();
      if (authenticated) {
          context.getExternalContext().getSessionMap().put("user", login);
          return "/home/NewFile?faces-redirect=true";
      } else {
          context.addMessage(null, new FacesMessage("Unknown login, try again"));
          login = "";
          pwd = "";
          return null;
      }
  }
}

当我从登录视图调用此函数时,它会重定向到NewFile.xhtml,因为它应该这样做。在所述xhtml内部,我使用"user"显示#{user}属性。到目前为止一切正常,但是当我刷新页面(NewFile.xhtml)或当我重定向到另一个页面并尝试显示"user"属性我得到null时,是否需要这种行为?刷新或重定向会创建另一个httpsession吗?或者只是删除我添加的属性?

1 个答案:

答案 0 :(得分:1)

经过一些研究,我成功地解决了我的问题,结果证明这只是我犯下的一个愚蠢的错误。所以我想我应该在这里留下答案,而不是删除问题。所以这里是:
经过一番环顾,我发现这与cookie有关,所以我确实使用chrome的F12跟踪HTTP流量,并且每次刷新/导航时服务器都会发送新的cookie。经过一些更多的搜索和测试后,我发现了导致会话无效的原因,所以我用这种方式调用了一个注销函数(使会话无效):<h:button outcome="view.logout()"/>结果outcome执行了加载页面之前的功能,所以我不得不将其更改为<p:commandButton action="view.logout()"/>