From d52b0f6f2b66c8df8390b8e598dddba445aa6c05 Mon Sep 17 00:00:00 2001 From: dahoud <41957584+DahoudG@users.noreply.github.com> Date: Sat, 25 Apr 2026 17:21:42 +0000 Subject: [PATCH] =?UTF-8?q?fix(sprint-17=20backend):=20JwtPropagationFilte?= =?UTF-8?q?r=20@ApplicationScoped=20=E2=80=94=20d=C3=A9couverte=20CDI=20po?= =?UTF-8?q?ur=20@QuarkusTest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JwtPropagationFilterTest @QuarkusTest fait @Inject JwtPropagationFilter mais la classe n'avait aucun scope CDI → UnsatisfiedResolutionException au démarrage du test. Le commentaire interdisait @Provider (auto-register JAX-RS global qui écraserait le service account des AdminUserServiceClient/AdminRoleServiceClient). Mais ne disait rien contre @ApplicationScoped : c'est un scope CDI ≠ provider JAX-RS. Fix : ajouter @ApplicationScoped (rend découvrable par CDI mais ne provoque PAS d'enregistrement automatique JAX-RS — l'opt-in reste via @RegisterProvider explicite). Suppression de l'import jakarta.ws.rs.ext.Provider devenu inutile. Commentaire de classe enrichi pour clarifier la nuance scope-CDI vs provider-JAX-RS. --- .../unionflow/server/client/JwtPropagationFilter.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/lions/unionflow/server/client/JwtPropagationFilter.java b/src/main/java/dev/lions/unionflow/server/client/JwtPropagationFilter.java index d9c44a4..58f35b7 100644 --- a/src/main/java/dev/lions/unionflow/server/client/JwtPropagationFilter.java +++ b/src/main/java/dev/lions/unionflow/server/client/JwtPropagationFilter.java @@ -2,11 +2,11 @@ package dev.lions.unionflow.server.client; import io.quarkus.oidc.runtime.OidcJwtCallerPrincipal; import io.quarkus.security.identity.SecurityIdentity; +import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.client.ClientRequestContext; import jakarta.ws.rs.client.ClientRequestFilter; import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.ext.Provider; import org.eclipse.microprofile.jwt.JsonWebToken; import org.jboss.logging.Logger; @@ -20,9 +20,15 @@ import java.io.IOException; * qui utilisent AdminServiceTokenHeadersFactory (service account). Le filtre global * écraserait le token de service account avec le JWT utilisateur → 401 sur LUM. * - *
La propagation JWT est assurée par {@link OidcTokenPropagationHeadersFactory} + *
{@code @ApplicationScoped} est requis pour la découverte CDI (tests {@code @QuarkusTest} + * qui {@code @Inject} le filter). Cela ne provoque PAS d'enregistrement automatique JAX-RS + * — l'opt-in se fait via {@code @RegisterProvider(JwtPropagationFilter.class)} sur les + * REST clients qui le souhaitent. + * + *
La propagation JWT par défaut est assurée par {@link OidcTokenPropagationHeadersFactory} * sur les clients qui en ont besoin ({@code @RegisterClientHeaders}). */ +@ApplicationScoped public class JwtPropagationFilter implements ClientRequestFilter { private static final Logger LOG = Logger.getLogger(JwtPropagationFilter.class);