Перезапись URL не работает со встроенным Jetty9 - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть приложение 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;
}
...