#java #spring #spring-mvc
#java #spring #spring-mvc
Вопрос:
Согласно спецификации RFC7239, синтаксис для перенаправленного заголовка следующий:
Forwarded: by=<identifier>;for=<identifier>;host=<host>;proto=<http|https>
Эти значения используются Spring (все последние версии), если они присутствуют, для отражения протокола и адреса, созданного клиентом (если это разрешено в конфигурации). Существует проблема при использовании нескольких значений в этом заголовке:
# Multiple values can be appended using a comma
Forwarded: for=192.0.2.43,for=198.51.100.17;proto=https;host=xxx.yyy.com;by=10.97.9.10
Код в UriComponentsBuilder#adaptFromForwardedHeaders:798-800
получает первый перенаправленный заголовок, если найдено несколько, разбивает его на запятую и использует только первую часть:
UriComponentsBuilder adaptFromForwardedHeaders(HttpHeaders headers) {
try {
String forwardedHeader = headers.getFirst("Forwarded");
if (StringUtils.hasText(forwardedHeader)) {
String forwardedToUse = StringUtils.tokenizeToStringArray(forwardedHeader, ",")[0];
....
}
Используя приведенный выше пример, forwardedToUse
переменная становится Forwarded: for=192.0.2.43
местом, где вся полезная информация обрезается.
Это действительно проблема или есть что-то, чего мне не хватает? И если это действительно проблема, как я могу с этим справиться. Заранее большое спасибо!
Ответ №1:
Похоже, что в Spring есть проблема с перенаправленным заголовком в случае нескольких значений. Это исправлено с помощью приведенного ниже коммита и будет доступно в следующем выпуске:
- Проблема с GitHub: проблема с перенаправленным заголовком и несколькими значениями
- Фиксация Spring Framework: Не маркировать значение прямого заголовка
- Релиз: Spring 5.2.9.РЕЛИЗ