У меня есть приложение Spring Boot 2.1.0 со встроенной Jetty 9.4.12, и мне нужно переписать URL-запросы с http://localhost/rewrite до http://localhost/rewritten. http://localhost/rewrite, не существует насервер и он должен ответить HTTP-кодом 200 (/ перезаписано существует на сервере).Я использовал Jetty RewriteHandler и смог успешно перенаправить URL, но это не решит мою проблему, потому что перенаправление отвечает HTTP-кодом 302. Мне нужна моя «фиктивная» конечная точка, чтобы ответить напрямую с HTTP-кодом 200, и я не понимаю, почему RewritePatternRuleне работает как RedirectPatternRule.В приведенной ниже реализации я получаю следующие ответы:
- / redirect -> HTTP-код 302 (и затем успешно перенаправляет на / перенаправленный)
- / redirected -> HTTP-код 200
- / переписать -> HTTP-код 404 (здесь я ожидаю HTTP-код 200 и содержимое от / переписать)
- / переписать -> 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;
}