Sie müssen alle angemeldeten Benutzer in einem Set<User>
in der Anwendung Umfang sammeln. Einfach anhängen login
und logout
und hinzufügen und entfernen Sie die User
entsprechend. Grundsätzlich gilt:
public void login(User user) {
// Do your business thing and then
logins.add(user);
}
public void logout(User user) {
// Do your business thing and then
logins.remove(user);
}
Wenn Sie die angemeldeten Benutzer in der Sitzung sind zu speichern, dann möchten Sie einen weiteren Haken auf Sitzung hinzufügen zerstören eine Abmeldung auf jedem angemeldeten Benutzer zu erteilen. Ich bin mir nicht sicher, wie Grails in das Bild passt, aber in der Java Servlet API zu sprechen, möchten Sie HttpSessionListener#sessionDestroyed()
dafür verwenden.
public void sessionDestroyed(HttpSessionEvent event) {
User user = (User) event.getSession().getAttribute("user");
if (user != null) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(user);
}
}
können Sie auch lassen Sie einfach die User
Modell HttpSessionBindingListener
implementieren. Die implementierten Methoden werden automatisch aufgerufen, wenn die User
Instanz in die Sitzung eingefügt oder aus ihr entfernt wird (was auch bei der Session-Zerstörung passieren würde).
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);
}
// @Override equals() and hashCode() as well!
}
Diese URL erfordert eine Anmeldung, so ist es nutzlos für alle, die nicht oder nicht registrieren auf dieser Website ist. – BalusC
@BalusC Frage aktualisiert – fabien7474