Прочитайте тело POST HTTPServletRequest И затем вызовите getParameter в Tomcat
Я нахожусь в ситуации, когда моему приложению необходимо проверить содержимое / данные / тело / полезную нагрузку запроса POST без изменения результатов последующих вызовов getParameter.
Чтение тела из inputStream:
Тело можно прочитать с помощью InputStream изrequest.getInputStream
или BufferedReader от.request.getReader
Чтение параметров POST:
POST-запросы обычно включают параметры запроса в теле запроса. Их можно получить с помощью.getParameter
Эта проблема:
первыйgetParameter
Вызов внутренне анализирует inputStream и вставляет все параметры в параметр HashMap. Это требует, чтобы inputStream все еще содержал содержание для синтаксического анализа. Таким образом, нельзя проверить содержимое и все еще иметь работающий вызов getParameter.
Предлагаемое (но не достаточное) решение
Создайте оболочку запроса, которая кэширует inputtream и возвращает кеш для getInputStream.I '
Мы видели, что это решение предлагается по всему Интернету, но оно нет работа, потому чтоgetParameter
Безразлично»на самом деле звонитеgetInputStream
, но ссылается на исходный inputBuffer, скрытый в объекте запроса. Я'мы попробовали это, как из сервлета, так и с помощью фильтра
Единственное решение, которое я могу придумать, заключается в переписывании getParameter для фактического анализа кэшированного потока ввода вручную. Но это похоже на плохую идею.
У кого-нибудь есть альтернатива, которая работает? (Это Tomcat 5.5) Такое ощущение, что это должен быть общий вариант использования; Я могу'Я не верю, насколько это сложно.