KEYCLOAK-2431 Ensure users removed through UserManager to properly invoke callbacks. Make UserSessionPersister implementations more resistent when user was not properly removed

This commit is contained in:
mposolda committed 2016-02-03 10:16:39 +01:00
1 parent 1edbf96cae
commit db76655717
8 files changed
+90 -22

No files matched your search

@@ -104,7 +104,7 @@ public class ClientManager {
UserModel serviceAccountUser = realmManager.getSession().users().getUserByServiceAccountClient(client);
if (serviceAccountUser != null) {
realmManager.getSession().users().removeUser(realm, serviceAccountUser);
new UserManager(realmManager.getSession()).removeUser(realm, serviceAccountUser);
}
return true;
@@ -1,37 +0,0 @@
package org.keycloak.services.managers;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.models.UserSessionProvider;
import org.keycloak.models.session.UserSessionPersisterProvider;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class UserManager {
private KeycloakSession session;
public UserManager(KeycloakSession session) {
this.session = session;
}
public boolean removeUser(RealmModel realm, UserModel user) {
UserSessionProvider sessions = session.sessions();
if (sessions != null) {
sessions.onUserRemoved(realm, user);
}
UserSessionPersisterProvider sessionsPersister = session.getProvider(UserSessionPersisterProvider.class);
if (sessionsPersister != null) {
sessionsPersister.onUserRemoved(realm, user);
}
if (session.users().removeUser(realm, user)) {
return true;
}
return false;
}
}