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());
}
}
如果我遵循 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());
}
}