Mettre en oeuvre HttpSessionListener
, donnez-lui une propriété static Set<HttpSession>
, ajoutez la session pendant la méthode sessionCreated()
, retirer la session de celle-ci au cours de la méthode sessionDestroyed()
, enregistrer l'écouteur comme dans <listener>
web.xml
. Vous avez maintenant une classe dont toutes les sessions ouvertes dans l'instance JBoss actuelle ont été collectées. Voici un exemple de base:
public HttpSessionCollector implements HttpSessionListener {
private static final Set<HttpSession> sessions = ConcurrentHashMap.newKeySet();
public void sessionCreated(HttpSessionEvent event) {
sessions.add(event.getSession());
}
public void sessionDestroyed(HttpSessionEvent event) {
sessions.remove(event.getSession());
}
public static Set<HttpSession> getSessions() {
return sessions;
}
}
Ensuite, dans votre servlet juste faire:
Set<HttpSession> sessions = HttpSessionCollector.getSessions();
Si vous voulez plutôt stocker/obtenir dans le champ d'application afin que vous puissiez faire le Set<HttpSession>
non statique, puis laisser le HttpSessionCollector
mettre en œuvre ServletContextListener
ainsi et ajouter essentiellement les méthodes suivantes:
public void contextCreated(ServletContextEvent event) {
event.getServletContext().setAttribute("HttpSessionCollector.instance", this);
}
public static HttpSessionCollector getCurrentInstance(ServletContext context) {
return (HttpSessionCollector) context.getAttribute("HttpSessionCollector.instance");
}
que vous pouvez utiliser dans Servlet comme suit:
HttpSessionCollector collector = HttpSessionCollector.getCurrentInstance(getServletContext());
Set<HttpSession> sessions = collector.getSessions();