From 86d0dc51b7bef715fd24ccc2d6b9aa7b533add81 Mon Sep 17 00:00:00 2001 From: dahoud <41957584+DahoudG@users.noreply.github.com> Date: Tue, 21 Apr 2026 12:45:44 +0000 Subject: [PATCH] =?UTF-8?q?fix(keycloak):=20g=C3=A9rer=20409=20User=20Conf?= =?UTF-8?q?lict=20+=20bump=20Lombok=20+=20release=2021=20explicite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserServiceImpl.createUser : capture HTTP 409 et récupère l'utilisateur existant (searchByEmail/searchByUsername) au lieu de throw brutal - usernameExists : utilise searchByUsername(exact=true) au lieu de search(query) pour match exact sans ambiguïté - pom.xml : 21 explicite sur maven-compiler-plugin - Lombok 1.18.34 → 1.18.36 Co-Authored-By: Claude Opus 4.7 (1M context) --- pom.xml | 3 ++- .../manager/service/impl/UserServiceImpl.java | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index ab3e1fd..c515dfb 100644 --- a/pom.xml +++ b/pom.xml @@ -187,6 +187,7 @@ org.apache.maven.plugins maven-compiler-plugin + 21 org.mapstruct @@ -196,7 +197,7 @@ org.projectlombok lombok - 1.18.34 + 1.18.36 org.projectlombok diff --git a/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java b/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java index 6362d0a..ac19c09 100644 --- a/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java +++ b/src/main/java/dev/lions/user/manager/service/impl/UserServiceImpl.java @@ -215,8 +215,25 @@ public class UserServiceImpl implements UserService { UsersResource usersResource = keycloakAdminClient.getUsers(realmName); var response = usersResource.create(userRep); + if (response.getStatus() == 409) { + // Utilisateur déjà existant — le récupérer par email ou username + log.warn("Utilisateur {} déjà existant dans Keycloak (409), récupération...", user.getUsername()); + if (user.getEmail() != null) { + List existing = usersResource.searchByEmail(user.getEmail(), true); + if (!existing.isEmpty()) { + log.info("Utilisateur récupéré par email: {}", user.getEmail()); + return UserMapper.toDTO(existing.get(0), realmName); + } + } + List existing = usersResource.searchByUsername(user.getUsername(), true); + if (!existing.isEmpty()) { + log.info("Utilisateur récupéré par username: {}", user.getUsername()); + return UserMapper.toDTO(existing.get(0), realmName); + } + throw new RuntimeException("Utilisateur en conflit mais introuvable: " + user.getUsername()); + } if (response.getStatus() != 201) { - throw new RuntimeException("Échec de la création de l'utilisateur: " + response.getStatusInfo()); + throw new RuntimeException("Échec de la création de l'utilisateur (HTTP " + response.getStatus() + " " + response.getStatusInfo().getReasonPhrase() + ")"); } // Récupérer l'ID de l'utilisateur créé @@ -465,7 +482,7 @@ public class UserServiceImpl implements UserService { public boolean usernameExists(@NotBlank String username, @NotBlank String realmName) { try { List users = keycloakAdminClient.getUsers(realmName) - .search(username, 0, 1, true); + .searchByUsername(username, true); return !users.isEmpty(); } catch (Exception e) { log.error("Erreur lors de la vérification de l'existence du username {}", username, e);