You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Jetty重写处理程序优先于Jersey过滤器执行以解决404问题

Jetty RewriteHandler 优先级高于 Jersey Filter 解决方案

你遇到的执行顺序问题核心是默认配置下Jetty RewriteHandler没有放在请求处理链的最顶层,导致请求先进入Servlet Filter链触发Jersey逻辑,还未执行URL重写,以下是两种可行的解决方案:

方案1:调整RewriteHandler为Jetty服务器顶层Handler(最可靠)

修改你的JettyServerCustomizer实现,将原有服务器的整个处理链作为重写Handler的下游,确保所有请求优先经过重写逻辑:

protected static JettyServerCustomizer jettyRewriteHandlerCustomizer() {
    return server -> {
        RewriteHandler rewrite = new RewriteHandler();
        rewrite.setRewriteRequestURI(true);
        rewrite.setRewritePathInfo(false);
        rewrite.setOriginalPathAttribute("originalPath");

        RewritePatternRule recommendationApiToNone = new RewritePatternRule();
        recommendationApiToNone.setPattern("/recommendation/api/*");
        recommendationApiToNone.setReplacement("/");
        rewrite.addRule(recommendationApiToNone);

        // 核心修改:将原有服务器处理链作为重写 handler 的下游逻辑
        rewrite.setHandler(server.getHandler());
        // 将重写 handler 设为服务器最顶层处理单元,保证优先执行
        server.setHandler(rewrite);
    };
}

原来的insertHandler方法仅将重写Handler插入到现有Handler链的局部位置,修改后所有请求进入Jetty后第一个执行的就是重写逻辑,URL重写完成后才会进入后续的Servlet上下文处理,自然就会在Jersey Filter之前执行。

方案2:调整Jersey Filter执行顺序

如果不想修改Jetty Handler结构,也可以通过配置调低Jersey Filter的优先级,在application配置文件中添加如下配置即可:

spring.jersey.filter.order=10

Spring Boot默认Jersey Filter的优先级为0,数值越大优先级越低,调整后即可保证重写逻辑优先执行完成后再进入Jersey过滤器。

内容的提问来源于stack exchange,提问作者Yibing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:57:03