2011-12-19 77 views
2

我在glassfish上使用j_security_check驗證jdbcRealm上的Glassfish連接到MSSQL數據庫。 有沒有什麼辦法來檢查是否存在給定用戶名的活動bean? 我只想顯示在線上的網頁上。我的猜測:如何檢查用戶何時通過會話過期退出

  1. 保持變量數據庫,並登錄/註銷改變它。如果有人沒有註銷,但他的會話過期,問題就會發生。比我沒有可能檢查他是否仍然登錄。
  2. 在bean中保留布爾變量,並使用登錄/註銷對其進行更改。問題與以前的機會一樣。

會話過期時是否有方法更改此類變量?也許其他一些方法更常見?

+0

爲什麼不在成員數據庫中爲聯機創建布爾字段,並且當他們的會話過期時將其設置爲false? – 2011-12-19 20:37:04

+0

這是我一直在考慮的事情,但我不知道如何檢查某人會話是否已過期,或者如何將變量變量平行地更改爲過期。 – xwhyz 2011-12-19 20:45:44

回答

2

如果有人沒有註銷,但他的會話過期,問題就出現了。 。比起我沒有

可能性,以檢查他是否在仍處於登錄你必須通過實施的可能性HttpSessionListener

@WebListener 
public class YourUserSessionListener implements HttpSessionListener { 

    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
     // NOOP. 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
     YourUser yourUser = event.getSession().getAttribute("yourUser"); 

     if (yourUser != null) { 
      yourUser.logout(); // Update DB. 
     } 
    } 

} 

哪裏YourUser是你的會話範圍JSF管理的bean代表登錄在用戶。

或者,當你在JSF2(你的問題的歷史證明),把@PreDestroy在會話中註銷方法範圍的JSF管理的bean代表登錄的用戶:

@ManagedBean 
@SessionScoped 
public class YourUser { 

    // ... 

    @PreDestroy 
    public void logout() { 
     // Update DB. 
    } 

} 

這樣的方法將在bean在會話到期之前被銷燬之前調用。

相關問題