2011-10-05 64 views
0

我正在使用tomcat服務器。 當應用程序必須由多個用戶訪問。所有用戶的詳細信息都只存儲在會話中。 在某些情況下,我必須獲取所有用戶的詳細信息。 如何迭代並獲取該會話的所有用戶詳細信息。如何迭代並獲取會話中的所有用戶名

回答

4

然後只收集並存儲應用程序範圍內的所有登錄。最簡單的方法是讓代表登錄用戶的User對象實現HttpSessionBindingListener。您只需在應用範圍內準備Set<User>(作爲ServletContext屬性)。

public class User implements HttpSessionBindingListener { 

    @Override 
    public void valueBound(HttpSessionBindingEvent event) { 
     Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins"); 
     logins.add(this); 
    } 

    @Override 
    public void valueUnbound(HttpSessionBindingEvent event) { 
     Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins"); 
     logins.remove(this); 
    } 

    // Don't forget to override equals() and hashCode() as well. 
} 

這樣一來,只要你登錄用戶如下

User user = userService.find(username, password); 

if (user != null) { 
    request.getSession().setAttribute("user", user); 
    // ... 
} 

那麼valueBound()將被調用。無論何時通過刪除屬性或使會話無效或讓會話過期來註銷用戶,都將調用valueUnbound()

ServletContext屬性當然只適用於所有的servlet和JSP。

相關問題