From 00a45a40e7ede6cc58fa9cf7a818999e5043ddef Mon Sep 17 00:00:00 2001 From: Alexander Schwartz Date: Thu, 9 Jan 2025 16:31:33 +0100 Subject: [PATCH] Avoid looking up the client if it is known during the commit phase Closes #36332 Signed-off-by: Alexander Schwartz --- .../JpaUserSessionPersisterProvider.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/session/JpaUserSessionPersisterProvider.java b/model/jpa/src/main/java/org/keycloak/models/jpa/session/JpaUserSessionPersisterProvider.java index e7d3006008e..3395e56f8cd 100644 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/session/JpaUserSessionPersisterProvider.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/session/JpaUserSessionPersisterProvider.java @@ -466,7 +466,7 @@ public class JpaUserSessionPersisterProvider implements UserSessionPersisterProv query.setMaxResults(1); return closing(query.getResultStream()) - .map(entity -> toAdapter(realm, userSession, entity)) + .map(entity -> toAdapter(realm, client, userSession, entity)) .findFirst() .orElse(null); } @@ -562,7 +562,7 @@ public class JpaUserSessionPersisterProvider implements UserSessionPersisterProv private boolean addClientSessionToAuthenticatedClientSessionsIfPresent(OfflineUserSessionModel userSession, PersistentClientSessionEntity clientSessionEntity) { - AuthenticatedClientSessionModel clientSessAdapter = toAdapter(userSession.getRealm(), userSession, clientSessionEntity); + AuthenticatedClientSessionModel clientSessAdapter = toAdapter(userSession.getRealm(), null, userSession, clientSessionEntity); if (clientSessAdapter.getClient() == null) { logger.tracef("Not adding client session %s / %s since client is null", userSession, clientSessAdapter); @@ -660,13 +660,15 @@ public class JpaUserSessionPersisterProvider implements UserSessionPersisterProv return new PersistentUserSessionAdapter(session, model, realm, entity.getUserId(), clientSessions); } - private AuthenticatedClientSessionModel toAdapter(RealmModel realm, UserSessionModel userSession, PersistentClientSessionEntity entity) { - String clientId = entity.getClientId(); - if (isExternalClient(entity)) { - clientId = getExternalClientId(entity); + private AuthenticatedClientSessionModel toAdapter(RealmModel realm, ClientModel client, UserSessionModel userSession, PersistentClientSessionEntity entity) { + if (client == null) { + String clientId = entity.getClientId(); + if (isExternalClient(entity)) { + clientId = getExternalClientId(entity); + } + // can be null if client is not found anymore + client = realm.getClientById(clientId); } - // can be null if client is not found anymore - ClientModel client = realm.getClientById(clientId); PersistentClientSessionModel model = new PersistentClientSessionModel() { @Override