0
我正在使用tomcat服務器。 當應用程序必須由多個用戶訪問。所有用戶的詳細信息都只存儲在會話中。 在某些情況下,我必須獲取所有用戶的詳細信息。 如何迭代並獲取該會話的所有用戶詳細信息。如何迭代並獲取會話中的所有用戶名
我正在使用tomcat服務器。 當應用程序必須由多個用戶訪問。所有用戶的詳細信息都只存儲在會話中。 在某些情況下,我必須獲取所有用戶的詳細信息。 如何迭代並獲取該會話的所有用戶詳細信息。如何迭代並獲取會話中的所有用戶名
然後只收集並存儲應用程序範圍內的所有登錄。最簡單的方法是讓代表登錄用戶的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。