keycloak-uncached

Details

diff --git a/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java b/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java
index 1bde0aa..c224f2d 100755
--- a/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java
+++ b/services/src/main/java/org/keycloak/services/managers/ResourceAdminManager.java
@@ -28,6 +28,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
 import java.net.URI;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -157,29 +158,44 @@ public class ResourceAdminManager {
         ApacheHttpClient4Executor executor = createExecutor();
 
         try {
-            // don't set user notBefore as we don't want a database hit on a user driven logout
-            List<ApplicationModel> resources = realm.getApplications();
-            logger.debugv("logging out {0} resources ", resources.size());
-            for (ClientSessionModel clientSession : session.getClientSessions()) {
-                ClientModel client = clientSession.getClient();
-                if (client instanceof ApplicationModel) {
-                    logoutApplication(requestUri, realm, (ApplicationModel) client, user, session.getId(), executor, 0);
+            List<ApplicationModel> resources;
+            if (session != null) {
+                resources = new LinkedList<ApplicationModel>();
+
+                for (ClientSessionModel clientSession : session.getClientSessions()) {
+                    ClientModel client = clientSession.getClient();
+                    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 {
             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();
 
         try {
-            // don't set user notBefore as we don't want a database hit on a user driven logout
-            List<ApplicationModel> resources = realm.getApplications();
+            List<ApplicationModel> resources = new LinkedList<ApplicationModel>();
+            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());
             for (ApplicationModel resource : resources) {
-                logoutApplication(requestUri, realm, resource, null, session, executor, 0);
+                logoutApplication(requestUri, realm, resource, null, session.getId(), executor, 0);
             }
         } finally {
             executor.getHttpClient().getConnectionManager().shutdown();
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java
index fe8a11e..45fae43 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java
@@ -259,7 +259,7 @@ public class RealmAdminResource {
         UserSessionModel userSession = session.sessions().getUserSession(realm, sessionId);
         if (userSession == null) throw new NotFoundException("Sesssion not found");
         session.sessions().removeUserSession(realm, userSession);
-        new ResourceAdminManager().logoutSession(uriInfo.getRequestUri(), realm, userSession.getId());
+        new ResourceAdminManager().logoutSession(uriInfo.getRequestUri(), realm, userSession);
     }
 
     /**