【问题标题】:clear the session after logout注销后清除会话
【发布时间】:2012-06-04 16:09:16
【问题描述】:

我在@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>

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    在您的托管 bean 中

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

    另见this答案

    第二部分

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

    而对于性能 - 它总是取决于你想要什么。如果它只是一个只加载一次的页面(比如一些报告或其他东西),那么使用 RequestScoped bean(它只存在于每个请求中)。

    只要用户停留在同一个视图上,ViewScoped 就会一直存在,因此它适用于假设带有动态表的页面正在进行 ajax 调用。

    而且 SessionScoped bean 存在整个会话,所以拿着购物车或类似的东西很好。

    【讨论】:

    • 对于问题的第二部分,有什么注释吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2018-09-24
    相关资源
    最近更新 更多