I want to implement a custom extension to be used in my services. One of the key features is to filter all the incoming requests:
JavaScript
x
@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");
}
}
And it’s being declared in that way:
JavaScript
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());
}
}
I also tried adding the Jandex plugin in the runtime pom
JavaScript
<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>
But it’s not being called.
I saw a similar scenario here but the solution doesn’t work for me.
Any suggestion? thanks in advance.
Advertisement
Answer
Finally, I got a solution.
I am using the quarkus-resteasy-reactive-jackson
library that provided @ServerRequestFilter
and you can build a CustomContainerRequestFilterBuildItem
that is used to register classes that are annotated with @ServerRequestFilter
:
JavaScript
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");
}
}
JavaScript
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());
}
}