Недавно мы обновились до Spring 5.1.3 и Hateoas 0.25 и начали сталкиваться с проблемами с генерируемыми ссылками.
Скажем, наш домен — xyz.com, и все запросы, которые приходят к любой подсистеме через балансировщик нагрузки, перенаправляются в основную систему, где сгенерированные ссылки ненависти имели ссылки с доменом xyz.com.
Однако после обновления ссылки ненависти, сгенерированные для таких запросов, теперь имеют внутреннее имя хоста, например. host5678.internaldomain.com.
Я столкнулся с проблемой, зарегистрированной для этого по адресу: https://github.com/spring-projects/spring-hateoas/issues/753, где было предоставлено временное решение через https://stackoverflow.com/a/53269319, который рекомендует использовать FilterRegistrationBean
Похоже, что FilterRegistrationBean доступен как часть Spring Boot, которую мы не используем, поэтому о решении не может быть и речи.
Поэтому я попытался добавить новый фильтр ForwardedHeaderFilter прямо в приложение web.xml. Однако это создает проблемы с URL-адресами перенаправления, когда HTTPS преобразуется в HTTP.
Другое упомянутое решение заключалось в обновлении до 0.25.1 и использовании свойства Spring server.use-forward-headers=true. Обновление выполнено, но я не смог найти XML-эквивалент этого свойства, так как мы используем Spring XML для конфигурации.
Любая помощь в этом отношении будет искренне признательна.




Нашел ответ, просмотрев источник и попробовав несколько разных комбинаций.
Проблемы, упомянутые в вопросе, были исправлены в выпуске Hateoas 0.25.1, поэтому одной из частей решения было обновление Hateoas до 0.25.1.
Другая часть вдохновлена ссылкой SO, указанной в вопросе, но в моем случае она не работала как есть, поскольку это применимо только для Spring Boot. Поскольку мы не используем Spring Boot, но у нас есть традиционное веб-приложение, работающее с контейнером J2EE, решение состоит в том, чтобы включить ForwardedHeaderFilter как часть web.xml веб-приложения следующим образом:
<filter>
<filter-name>forwardedHeaderFilter</filter-name>
<filter-class>org.springframework.web.filter.ForwardedHeaderFilter</filter-class>
<init-param>
<param-name>relativeRedirects</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>forwardedHeaderFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>