首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContainerRequestFilter在我的Quarkus扩展中被忽略了

ContainerRequestFilter在我的Quarkus扩展中被忽略了
EN

Stack Overflow用户
提问于 2022-06-15 06:41:40
回答 1查看 327关注 0票数 0

我想实现一个要在我的服务中使用的自定义扩展。其中一个关键特性是过滤所有传入请求:

代码语言:javascript
复制
@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");
    }
}

它是以这种方式宣布的:

代码语言: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());
    }
}

我还尝试在运行时pom中添加Jandex插件。

代码语言: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>

但没人叫它。

我看到了一个类似的场景here,但是这个解决方案对我不起作用。

有什么建议吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-16 12:35:03

最后,我找到了解决办法。

我使用的是提供quarkus-resteasy-reactive-jackson@ServerRequestFilter库,您可以构建一个CustomContainerRequestFilterBuildItem,用于注册使用@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());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72626925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档