Последние 2 дня я безуспешно пытался разобраться в странной проблеме перенаправления.
На основе примеров проектов Spring-Cloud я настроил Eureka, Zuul и базовый сервис, который работает за Zuul.
У меня есть следующий метод;
@RequestMapping(method = RequestMethod.POST, value = "/register")
public String registerDevice(Principal principal, String response) {
// ...
return "redirect:/account";
}
Форма настроена для публикации на прокси-URL следующим образом:
POST https://localhost:8443/service/register
(Zuul работает на localhost: 8443).
URL-адрес для локальной службы (без прокси) будет: http://localhost:9001/register
Вызов POST правильно проксируется через указанный выше метод, однако адрес перенаправления, отправляемый в браузер, является URL-адресом службы без прокси; http://localhost:9001/account
Прокси-сервер Zuul определенно отправляет правильные заголовки x-forwarded- *, поэтому я ожидаю, что преобразователь представлений в Spring построит правильное перенаправление на основе значений x-forwarded.
Чтобы убедиться, что заголовки отправлены правильно, я изменил конфигурацию метода следующим образом;
@RequestMapping(method = RequestMethod.POST, value = "/register")
public void registerDevice(Principal, String response, HttpServletResponse response) {
// ...
String rUrl = ServletUriComponentsBuilder.fromCurrentContextPath().path("/account").build().toUriString();
servletResponse.sendRedirect(rUrl);
}
Что правильно перенаправляет браузер в прокси-сервер; https://localhost:8443/service/account
Это ошибка или это ожидаемое поведение? Я думал, что использование "redirect:" предназначено для соблюдения заголовков переадресации, передаваемых прокси.