В настоящее время я использую UriInfo, внедренный инфраструктурой jax-rs (в настоящее время RestEasy), для создания URI, который я использую в заголовке Location. URL-адрес, созданный из UriInfo, также используется в ответе xml/json.

Итак, вкратце это выглядит примерно так:


public class ResourceBean {
  @Context
  private UriInfo uriInfo
  public Response mappedMethod(){
    ...
    UriBuilder builder = uriInfo.getBaseUriBuilder().path(...);
    ...
  }
}

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

Я понимаю, что некоторые балансировщики нагрузки могут переписывать URL-адреса для достижения этой цели, но, к сожалению, у меня нет никакого контроля или доступа к нашим балансировщикам нагрузки, и я не знаю, поддерживают ли они это, и возможно ли это вообще в теле html-ответ.

Существует ли центральная точка, где UriInfo можно манипулировать или сконструировать так, чтобы он содержал базовый URI балансировщика нагрузки?

1
fransvn 10 Мар 2011 в 09:55

1 ответ

Я нашел, где построен UriInfo. Информация собирается из HttpServletRequest. К сожалению, нет другого способа, кроме как изменить код RestEasy, чтобы манипулировать им.

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

0
fransvn 11 Мар 2011 в 16:19