Замените определенный заголовок «Set-Cookie» в HttpServletResponse - PullRequest
0 голосов
/ 05 июня 2019

Средство защиты ZAP недавно добавило функцию, которая проверяет, что все куки должны содержать атрибут "SameSite" со значением "lax" или "strict".Java EE API Cookie еще не поддерживает этот атрибут.Таким образом, если вы хотите установить его, вы должны сделать это вручную, манипулируя соответствующим Set-Cookie Заголовком HttpServletResponse.

Я пытаюсь сделать это для очень специфического файла cookie, который создается и добавляется в ответ, который я не могу контролировать.Таким образом, я добавил фильтр, который должен исправить этот файл cookie, просто добавив атрибут SameSite=lax.Однако я не знаю, как справиться с возможностью присутствия нескольких Set-Cookie заголовков в HttpServletResponse -объекте, над которым я работаю.Поиск правильного не является проблемой, так как я могу найти нужное имя файла cookie в значении, которое возвращается HttpServletResponse::getHeaders(String) (или, что еще проще, использовать API getCookie() и т. Д.).

Но установка заголовка обратно в ответ и замена старого является проблемой.Документы HttpServletResponse::setHeader(String) говорят, что он заменит существующий заголовок, если он уже существует с идентичным именем, но с другим значением.Однако, если ответ содержит несколько заголовков Set-Cookie, что вполне законно, то я думаю, что это будет неопределенный результат, который мой setHeader-вызов закончит заменой (так как все существующие заголовки Set-Cookie будут возможным кандидатом назамена, в соответствии с моим пониманием документов).Это правильно, и если да, что я могу сделать, чтобы заменить правильный заголовок?

Единственное, что я могу придумать, - это использовать вместо него addHeader.Браузер должен теоретически заменить куки с идентичным именем и идентификатором (а также путем и доменом), которые являются друг другом, поэтому, когда в ответе есть несколько заголовков куки, он должен взять последний.Это, однако, потребовало бы гарантии того, что addHeader() будет добавлен в конце, и что этот порядок никогда не будет изменен / изменен на обратном пути к браузеру - я сомневаюсь, что это обещание достаточно стабильно, чтобы его можно было построить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...