URL重写不适用于嵌入式jetty9

时间:2018-12-10 07:37:48

标签: spring-boot jetty embedded-jetty jetty-9

我有一个带有嵌入式Jetty 9.4.12的Spring Boot 2.1.0应用程序,我需要将URL请求从http://localhost/rewrite重写为http://localhost/rewrittenhttp://localhost/rewrite在服务器上不存在,它需要使用HTTP代码200响应(/已重写在服务器上)。我使用了Jetty的RewriteHandler并成功进行了成功的URL重定向,但这无法解决我的问题,因为重定向使用HTTP代码302进行响应。我需要我的“虚拟”端点直接使用HTTP代码200进行响应,并且我不明白为什么RewritePatternRule不像RedirectPatternRule那样工作。 通过以下实现,我得到以下响应:

  • / redirect-> HTTP代码302(然后成功重定向到/ redirected)
  • /重定向-> HTTP代码200
  • / rewrite-> HTTP代码404(我希望这里是HTTP代码200和/ rewrite的内容)
  • /重写-> HTTP代码200

请帮助。

@Bean
public ConfigurableServletWebServerFactory webServerFactory2() {
    JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
    factory.addServerCustomizers(new JettyServerCustomizer() {
        @Override
        public void customize(Server server) {
            RewriteHandler rewrite = new RewriteHandler();
            rewrite.setRewriteRequestURI(true);
            rewrite.setRewritePathInfo(false);
            rewrite.setOriginalPathAttribute("requestedPath");

            // Working
            RedirectPatternRule rule1 = new RedirectPatternRule();
            rule1.setPattern("/redirect");
            rule1.setLocation("/redirected");
            rewrite.addRule(rule1);

            // Not working
            RewritePatternRule rule2 = new RewritePatternRule();
            rule2.setPattern("/rewrite");
            rule2.setReplacement("/rewritten");
            rewrite.addRule(rule2);

            HandlerCollection handlerCollection = new HandlerCollection();
            handlerCollection.setHandlers(new Handler[] {rewrite, server.getHandler()});

            server.setHandler(handlerCollection);
        }
    });
    return factory;
}

0 个答案:

没有答案