diff --git a/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java b/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java index d1573a8d09198..4aa3a614ce8ea 100644 --- a/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java +++ b/extensions/oidc-client-reactive-filter/deployment/src/main/java/io/quarkus/oidc/client/reactive/filter/deployment/OidcClientReactiveFilterBuildStep.java @@ -1,17 +1,46 @@ package io.quarkus.oidc.client.reactive.filter.deployment; +import java.util.Collection; +import java.util.List; + +import org.jboss.jandex.AnnotationInstance; +import org.jboss.jandex.AnnotationValue; +import org.jboss.jandex.DotName; +import org.jboss.jandex.Type; + import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.BuildSteps; import io.quarkus.deployment.builditem.AdditionalIndexedClassesBuildItem; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; import io.quarkus.oidc.client.deployment.OidcClientBuildStep.IsEnabled; +import io.quarkus.oidc.client.reactive.filter.OidcClientFilter; import io.quarkus.oidc.client.reactive.filter.OidcClientRequestReactiveFilter; +import io.quarkus.rest.client.reactive.deployment.DotNames; +import io.quarkus.rest.client.reactive.deployment.RegisterProviderAnnotationInstanceBuildItem; @BuildSteps(onlyIf = IsEnabled.class) public class OidcClientReactiveFilterBuildStep { + private static final DotName OIDC_CLIENT_FILTER = DotName.createSimple(OidcClientFilter.class.getName()); + private static final DotName OIDC_CLIENT_REQUEST_REACTIVE_FILTER = DotName + .createSimple(OidcClientRequestReactiveFilter.class.getName()); + + // we simply pretend that @OidcClientFilter means @RegisterProvider(OidcClientRequestReactiveFilter.class) + @BuildStep + void oidcClientFilterSupport(CombinedIndexBuildItem indexBuildItem, + BuildProducer producer) { + Collection instances = indexBuildItem.getIndex().getAnnotations(OIDC_CLIENT_FILTER); + for (AnnotationInstance instance : instances) { + String targetClass = instance.target().asClass().name().toString(); + producer.produce(new RegisterProviderAnnotationInstanceBuildItem(targetClass, AnnotationInstance.create( + DotNames.REGISTER_PROVIDER, instance.target(), List.of(AnnotationValue.createClassValue("value", + Type.create(OIDC_CLIENT_REQUEST_REACTIVE_FILTER, org.jboss.jandex.Type.Kind.CLASS)))))); + } + } + @BuildStep void registerProvider(BuildProducer additionalBeans, BuildProducer reflectiveClass, diff --git a/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientFilter.java b/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientFilter.java new file mode 100644 index 0000000000000..3b412dfa5bb9e --- /dev/null +++ b/extensions/oidc-client-reactive-filter/runtime/src/main/java/io/quarkus/oidc/client/reactive/filter/OidcClientFilter.java @@ -0,0 +1,13 @@ +package io.quarkus.oidc.client.reactive.filter; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface OidcClientFilter { +} diff --git a/integration-tests/oidc-client-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedResourceServiceReactiveFilter.java b/integration-tests/oidc-client-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedResourceServiceReactiveFilter.java index 9ae3873bc324b..b1436709da13f 100644 --- a/integration-tests/oidc-client-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedResourceServiceReactiveFilter.java +++ b/integration-tests/oidc-client-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedResourceServiceReactiveFilter.java @@ -4,14 +4,13 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; -import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -import io.quarkus.oidc.client.reactive.filter.OidcClientRequestReactiveFilter; +import io.quarkus.oidc.client.reactive.filter.OidcClientFilter; import io.smallrye.mutiny.Uni; @RegisterRestClient -@RegisterProvider(OidcClientRequestReactiveFilter.class) +@OidcClientFilter @Path("/") public interface ProtectedResourceServiceReactiveFilter {