ServletUriComponentsBuilder.fromRequest возвращает схему http вместо https - PullRequest
1 голос
/ 11 июля 2019

У меня есть веб-приложение, составленное из кода внешнего интерфейса, который вызывает тот же API, реализованный двумя внутренними модулями. Этот API-интерфейс возвращает URL-адрес в объекте JSON. Бэкэнд-модули написаны с использованием Spring mvc, но в разных версиях. URL-адрес здания такой же, и он выглядит примерно так:

@GetMapping(path = "/app1/menu", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
   public JsonObject getMenu(HttpServletRequest req) throws IOException {
       JsonObject menu = new JsonObject();
       menu.addProperty("href", ServletUriComponentsBuilder.fromRequest(req)
               .replacePath(req.getContextPath())
               .path("/index.html")
               .toUriString());
       return menu;
}

Как видите, этот код просто добавляет константу во входящий запрос и возвращает его. Первое приложение использует Spring MVC 4 (точно 4.3.5. ВЫПУСК). Второй модуль использует версию 5.1.4.RELEASE. Когда все эти приложения развернуты на сервере с балансировкой нагрузки (2 экземпляра tomcat с предварительным балансировщиком нагрузки) и https, проблема обнаруживается. Скажем, что URL-адрес запроса для app1 выглядит примерно так:

https://example.com/context/app1/menu

Приложение 1 возвращается правильно

https://example.com/context/index.html

Для app2 запрос от внешнего интерфейса https://example.com/context/app2/menu

И ответ http://example.com/context/another_index.html

Так что он теряет схему https

Похоже, что ServletUriComponentsBuilder.fromRequest изменил поведение? Я быстро взглянул на коммиты в git-репо, но не стал нашел что-нибудь ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...