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