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

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

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