Прочитайте тело POST HTTPServletRequest И затем вызовите getParameter в Tomcat

Я нахожусь в ситуации, когда моему приложению необходимо проверить содержимое / данные / тело / полезную нагрузку запроса POST без изменения результатов последующих вызовов getParameter.

Чтение тела из inputStream:

Тело можно прочитать с помощью InputStream изrequest.getInputStream или BufferedReader отrequest.getReader.

Чтение параметров POST:

POST-запросы обычно включают параметры запроса в теле запроса. Их можно получить с помощьюgetParameter.

Проблема:

первыйgetParameter Вызов внутренне анализирует inputStream и вставляет все параметры в параметр HashMap. Это требует, чтобы inputStream все еще содержал содержание для синтаксического анализа. Таким образом, нельзя проверить содержимое и все еще иметь работающий вызов getParameter.

Предлагаемое (но не достаточное) решение

Создайте оболочку запроса, которая кэширует inputtream и возвращает кеш для getInputStream.

Я видел это решение, предложенное по всей сети, но оно не работает, потому чтоgetParameter на самом деле не звонитgetInputStream, но ссылается на исходный inputBuffer, скрытый в объекте запроса. Я пробовал это, как из сервлета, так и с помощью фильтра

Единственное решение, которое я могу придумать, заключается в переписывании getParameter для фактического анализа кэшированного входного потока вручную. Но это похоже на плохую идею.

У кого-нибудь есть альтернатива, которая работает? (Это Tomcat 5.5) Такое ощущение, что это должен быть общий вариант использования; Я не могу поверить, насколько это сложно.

Ответы на вопрос(2)

Ваш ответ на вопрос