Проблема с перенаправленным заголовком и несколькими значениями в Spring

#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 есть проблема с перенаправленным заголовком в случае нескольких значений. Это исправлено с помощью приведенного ниже коммита и будет доступно в следующем выпуске: