fix(sprint-17 backend): JwtPropagationFilter @ApplicationScoped — découverte CDI pour @QuarkusTest
Some checks failed
CI/CD Pipeline / pipeline (push) Failing after 3m11s

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.
This commit is contained in:
dahoud
2026-04-25 17:21:42 +00:00
parent 2826d75aa6
commit d52b0f6f2b

View File

@@ -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.
*
* <p>La propagation JWT est assurée par {@link OidcTokenPropagationHeadersFactory}
* <p>{@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.
*
* <p>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);