From 9f00e9eb3aa7882d37a2ee0e6e4e54d831b38b90 Mon Sep 17 00:00:00 2001 From: statist32 Date: Tue, 1 Jul 2025 12:28:35 +0200 Subject: [PATCH 1/2] Load declarative component instead of any user profile component Signed-off-by: statist32 --- .../userprofile/DeclarativeUserProfileProvider.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java b/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java index 95b3daae32fa..bb3dde49fd42 100644 --- a/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java +++ b/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java @@ -213,12 +213,14 @@ public UPConfig getConfiguration() { @Override public void setConfiguration(UPConfig configuration) { RealmModel realm = session.getContext().getRealm(); - Optional optionalComponent = realm.getComponentsStream(realm.getId(), UserProfileProvider.class.getName()).findAny(); + Optional optionalComponent = getComponentModel(); // Avoid creating componentModel and then removing it right away - if (!optionalComponent.isPresent() && configuration == null) return; + if (optionalComponent.isEmpty() && configuration == null) { + return; + } - ComponentModel component = optionalComponent.isPresent() ? optionalComponent.get() : createComponentModel(); + ComponentModel component = optionalComponent.orElseGet(this::createComponentModel); removeConfigJsonFromComponentModel(component); @@ -238,7 +240,7 @@ public void setConfiguration(UPConfig configuration) { private Optional getComponentModel() { RealmModel realm = session.getContext().getRealm(); - return realm.getComponentsStream(realm.getId(), UserProfileProvider.class.getName()).findAny(); + return realm.getComponentsStream(realm.getId(), UserProfileProvider.class.getName()).filter(componentModel -> componentModel.getProviderId().equals(DeclarativeUserProfileProviderFactory.ID)).findFirst(); } /** From 474803a97d0f47530e60f38d6b306fe75b301d46 Mon Sep 17 00:00:00 2001 From: statist32 Date: Wed, 2 Jul 2025 08:29:52 +0200 Subject: [PATCH 2/2] Use providerId from class attribute Signed-off-by: statist32 --- .../keycloak/userprofile/DeclarativeUserProfileProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java b/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java index bb3dde49fd42..f590b3fff553 100644 --- a/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java +++ b/services/src/main/java/org/keycloak/userprofile/DeclarativeUserProfileProvider.java @@ -240,7 +240,7 @@ public void setConfiguration(UPConfig configuration) { private Optional getComponentModel() { RealmModel realm = session.getContext().getRealm(); - return realm.getComponentsStream(realm.getId(), UserProfileProvider.class.getName()).filter(componentModel -> componentModel.getProviderId().equals(DeclarativeUserProfileProviderFactory.ID)).findFirst(); + return realm.getComponentsStream(realm.getId(), UserProfileProvider.class.getName()).filter(componentModel -> componentModel.getProviderId().equals(providerId)).findFirst(); } /**