注销后清除会话

时间:2012-05-30 12:12:29

标签: jsf-2

我在@SessionScoped中有很多托管bean,我希望在用户注销时清除整个会话。有谁知道如何实现这一目标?哪个效果最好:@SessionScoped@RequestScoped@ViewScoped?还有注释来替换文件faces-config.xml中的重定向吗?

我可以用注释替换以下内容:

  <navigation-rule>
    <from-view-id>pages/login.xhtml</from-view-id>
    <navigation-case>
      <from-outcome>userOK</from-outcome>
      <to-view-id>pages/template.xhtml</to-view-id>
      <redirect />
    </navigation-case>
    <navigation-case>
      <from-outcome>userNOK</from-outcome>
      <to-view-id>pages/login.xhtml</to-view-id>
    </navigation-case>    
  </navigation-rule>

1 个答案:

答案 0 :(得分:4)

在托管bean中

 public void logout() {
     FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
 }

另请参阅this回答

第二部分

不,没有注释。但您可以随时添加到您的链接"/home.xhtml?faces-redirect=true"

对于表演 - 它总是取决于你想要的。如果它只是一个只加载一次的页面(如某些报告或其他东西),那么使用RequestScoped bean(它只能按一个请求生存)。

只要用户停留在同一个视图上,ViewScoped就会存在,所以让我们说带有动态表的页面正在进行ajax调用。

SessionScoped bean可以在整个会话中使用,所以拿着购物车或其他东西都很好。