Как получить фактический URL-адрес запроса в маршрутизируемом сервисе при использовании сервиса Zuul и загрузке Spring? - PullRequest
0 голосов
/ 29 июня 2018

Я использую сервис zuul в качестве шлюза API для всех моих микро сервисов.

В фильтре zuul я могу получить requestUrl, как показано ниже:

import javax.servlet.http.HttpServletRequest;
import com.netflix.zuul.context.RequestContext;
.....
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String requestUrl = request.getRequestURL();

Здесь requestUrl: http://localhost:8052/api/userservice/users

В пользовательской службе, когда я пытаюсь получить URL-адрес запроса в контроллере остальной загрузки при помощи HttpServletRequest:

String requestUrl = request.getRequestURL();

Здесь requestUrl: http://localhost:8055/userservice/users

Я получаю URL-адрес запроса маршрутизируемой службы, но НЕ фактический URL, запрошенный клиентом.

Как получить фактический URL запроса в маршрутизируемой службе?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Zuul создает новый Http-запрос к услуге пользователя. очевидно, с другим URL. Поэтому в пользовательском сервисе невозможно получить доступ к оригинальному запросу по проекту.

Zuul должен инкапсулировать оригинальный запрос, а не раскрывать его. Все заголовки, параметры запроса, тело запроса должны быть сохранены, это только путь для изменения.

Если по какой-то причине необходимо получить параметры из исходного запроса, в фильтре Zuul их можно извлечь и установить в качестве заголовков для «нового» запроса перед его отправкой в ​​службу пользователя. Тогда в UserService также должен быть фильтр, который будет «читать» эти заголовки и использовать информацию по мере необходимости

0 голосов
/ 05 июля 2018

Вы получаете перенаправленную службу, потому что при вызове метода getRequestURL после изменения URL-адреса запроса. Вызывая тот же метод в предварительном фильтре, порядок которого -50 (например), вы можете получить фактический полученный URL-адрес сервера zuul.

Пока что я не нашел способа получить реальный URL в фильтре маршрута / поста после изменения запроса, я думаю, что один из способов решения этой проблемы - определить предварительный фильтр, чтобы получить реальный URL до изменения, и поместите URL-адрес в поле Threadlocal, затем вы можете получить URL-адрес в фильтре маршрута / поста, обратившись к полю.

...