我想实现一个要在我的服务中使用的自定义扩展。其中一个关键特性是过滤所有传入请求:
@Provider
public class RequestInterceptor implements ContainerRequestFilter {
private static final Logger logger = Logger.getLogger(RequestInterceptor.class.getName());
@Override
public void filter(ContainerRequestContext requestContext) {
logger.info("Testing extension interceptor");
}
}它是以这种方式宣布的:
class LoggingExtensionProcessor {
private static final Logger logger = Logger.getLogger(LoggingExtensionProcessor.class.getName());
private static final String FEATURE = "logging-extension";
@BuildStep
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}
@BuildStep
ServletBuildItem createServlet() {
logger.info("createServlet");
return ServletBuildItem.builder(FEATURE, GreetingExtensionServlet.class.getName())
.addMapping("/greeting")
.build();
}
@BuildStep
AdditionalBeanBuildItem registerAdditionalBeans() {
logger.info("registerAdditionalBeans");
return AdditionalBeanBuildItem.builder()
.setUnremovable()
.addBeanClass(RequestInterceptor.class)
.build();
}
@BuildStep
ResteasyJaxrsProviderBuildItem registerConfiguration() {
logger.info("registerConfiguration");
return new ResteasyJaxrsProviderBuildItem(RequestInterceptor.class.getName());
}
}我还尝试在运行时pom中添加Jandex插件。
<plugin>
<groupId>org.jboss.jandex</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>但没人叫它。
我看到了一个类似的场景here,但是这个解决方案对我不起作用。
有什么建议吗?提前谢谢。
发布于 2022-06-16 12:35:03
最后,我找到了解决办法。
我使用的是提供quarkus-resteasy-reactive-jackson的@ServerRequestFilter库,您可以构建一个CustomContainerRequestFilterBuildItem,用于注册使用@ServerRequestFilter注释的类。
public class RequestInterceptor {
private static final Logger logger = Logger.getLogger(RequestInterceptor.class.getName());
@ServerRequestFilter(preMatching = true)
public void filter(ContainerRequestContext requestContext) {
logger.info("Testing extension interceptor");
}
}class LoggingExtensionProcessor {
private static final Logger logger = Logger.getLogger(LoggingExtensionProcessor.class.getName());
private static final String FEATURE = "logging-extension";
@BuildStep
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}
@BuildStep
ServletBuildItem createServlet() {
logger.info("createServlet");
return ServletBuildItem.builder(FEATURE, GreetingExtensionServlet.class.getName())
.addMapping("/greeting")
.build();
}
@BuildStep
CustomContainerRequestFilterBuildItem buildContainerRequestFilter() {
return new CustomContainerRequestFilterBuildItem(RequestInterceptor.class.getName());
}
}https://stackoverflow.com/questions/72626925
复制相似问题