package dev.lions.user.manager.config; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.ObjectMapper; import io.quarkus.jackson.ObjectMapperCustomizer; import jakarta.inject.Singleton; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.representations.idm.RoleRepresentation; /** * Customizer pour Jackson afin d'ignorer les propriétés inconnues dans les * représentations Keycloak. * Cela évite les erreurs de désérialisation (comme bruteForceStrategy) lorsque * le serveur Keycloak * est plus récent que les bibliothèques clients. */ @Singleton public class KeycloakJacksonCustomizer implements ObjectMapperCustomizer { @Override public void customize(ObjectMapper objectMapper) { // En plus de la configuration globale, on force les Mix-ins pour les classes // Keycloak critiques objectMapper.addMixIn(RealmRepresentation.class, IgnoreUnknownMixin.class); objectMapper.addMixIn(UserRepresentation.class, IgnoreUnknownMixin.class); objectMapper.addMixIn(RoleRepresentation.class, IgnoreUnknownMixin.class); } @JsonIgnoreProperties(ignoreUnknown = true) abstract static class IgnoreUnknownMixin { } }