Прочитайте тело 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) Такое ощущение, что это должен быть общий вариант использования; Я не могу поверить, насколько это сложно.