Fixes to KEYCLOAK-682

This commit is contained in:
Stian Thorgersen 2014-09-12 12:26:42 +02:00
parent c9c525e942
commit 7c15a70f53
2 changed files with 28 additions and 12 deletions

View file

@ -28,6 +28,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilder;
import java.net.URI; import java.net.URI;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -157,29 +158,44 @@ public class ResourceAdminManager {
ApacheHttpClient4Executor executor = createExecutor(); ApacheHttpClient4Executor executor = createExecutor();
try { try {
// don't set user notBefore as we don't want a database hit on a user driven logout List<ApplicationModel> resources;
List<ApplicationModel> resources = realm.getApplications(); if (session != null) {
logger.debugv("logging out {0} resources ", resources.size()); resources = new LinkedList<ApplicationModel>();
for (ClientSessionModel clientSession : session.getClientSessions()) {
ClientModel client = clientSession.getClient(); for (ClientSessionModel clientSession : session.getClientSessions()) {
if (client instanceof ApplicationModel) { ClientModel client = clientSession.getClient();
logoutApplication(requestUri, realm, (ApplicationModel) client, user, session.getId(), executor, 0); if (client instanceof ApplicationModel) {
resources.add((ApplicationModel) client);
}
} }
} else {
resources = realm.getApplications();
}
logger.debugv("logging out {0} resources ", resources.size());
for (ApplicationModel resource : resources) {
logoutApplication(requestUri, realm, resource, user, session != null ? session.getId() : null, executor, 0);
} }
} finally { } finally {
executor.getHttpClient().getConnectionManager().shutdown(); executor.getHttpClient().getConnectionManager().shutdown();
} }
} }
public void logoutSession(URI requestUri, RealmModel realm, String session) { public void logoutSession(URI requestUri, RealmModel realm, UserSessionModel session) {
ApacheHttpClient4Executor executor = createExecutor(); ApacheHttpClient4Executor executor = createExecutor();
try { try {
// don't set user notBefore as we don't want a database hit on a user driven logout List<ApplicationModel> resources = new LinkedList<ApplicationModel>();
List<ApplicationModel> resources = realm.getApplications(); for (ClientSessionModel clientSession : session.getClientSessions()) {
ClientModel client = clientSession.getClient();
if (client instanceof ApplicationModel) {
resources.add((ApplicationModel) client);
}
}
logger.debugv("logging out {0} resources ", resources.size()); logger.debugv("logging out {0} resources ", resources.size());
for (ApplicationModel resource : resources) { for (ApplicationModel resource : resources) {
logoutApplication(requestUri, realm, resource, null, session, executor, 0); logoutApplication(requestUri, realm, resource, null, session.getId(), executor, 0);
} }
} finally { } finally {
executor.getHttpClient().getConnectionManager().shutdown(); executor.getHttpClient().getConnectionManager().shutdown();

View file

@ -259,7 +259,7 @@ public class RealmAdminResource {
UserSessionModel userSession = session.sessions().getUserSession(realm, sessionId); UserSessionModel userSession = session.sessions().getUserSession(realm, sessionId);
if (userSession == null) throw new NotFoundException("Sesssion not found"); if (userSession == null) throw new NotFoundException("Sesssion not found");
session.sessions().removeUserSession(realm, userSession); session.sessions().removeUserSession(realm, userSession);
new ResourceAdminManager().logoutSession(uriInfo.getRequestUri(), realm, userSession.getId()); new ResourceAdminManager().logoutSession(uriInfo.getRequestUri(), realm, userSession);
} }
/** /**