Quarkus - 扩展包括第 3 方 ContainerRequestFilter

Quarkus - extension include 3rd party ContainerRequestFilter

如果我遵循 this,我可以添加一个 ContainerRequestFilter,它会按预期被 Quarkus 和 运行s 接收。但是,我正在编写一个扩展以利用另一个团队编写的 ContainerRequestFilter。我不确定如何让 Quarkus 使用这个过滤器。我尝试将其添加为 AdditionalBeanBuildItem

@BuildStep
public void producer(BuildProducer<AdditionalBeanBuildItem> additionalBeans) {    
  additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(3rdPartyFilter.class));
}

但这行不通,并且过滤器不会 运行 请求。

您可以看看其他扩展程序是如何做到这一点的,例如 quarkus-smallrye-opentracing 是如何做到的。

基本上您只需要在应用程序的 runtime 模块中添加一个 JAX-RS DynamicFeature。

@Provider
public class QuarkusSmallRyeTracingStandaloneVertxDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext context) {
        context.register(MyFilter.class);
    }

    public static class MyFilter implements ContainerRequestFilter {
        // whatever
    }
}

除了@geoand 的回答,我认为您还需要在扩展的部署部分添加一个@BuildStep。

import io.quarkus.resteasy.common.spi.ResteasyJaxrsProviderBuildItem;

class MyProcessor {

    @BuildStep
    ResteasyJaxrsProviderBuildItem createOpentracingFilter() {
        return new ResteasyJaxrsProviderBuildItem(MyFilter.class.getName());
    }
}