Готовая к производству оболочка запроса для буферизации тела запроса на Tomcat - PullRequest
3 голосов
/ 09 ноября 2010

Нам нужен HttpRequestWrapper, который может буферизовать тело запроса POST / PUT, чтобы мы могли, например, напечатать его в сообщениях журнала. Стандартный HttpServletRequest не позволяет нам кэшировать тело: если вы прочитаете его один раз, оно исчезнет, ​​потому что это поток. Мы создали простой класс-обертку, который читает тело, сохраняет его как String и переопределяет методы getReader () / getInputStream (), чтобы они считывали тело из этой String. Однако теперь мы обнаружили, что он не работает, когда вы вызываете методы getParameter * () (они всегда возвращают ноль / пусто) - возможно, потому что эти методы делегируются в обернутый исходный запрос, который не знает о буферизованном теле, и он пытается прочитать исходный поток, который уже пропал.

Итак, нам, вероятно, нужно переопределить все связанные с параметрами методы в запросах POST (getParameter, getParameterMaps и т. Д.) - возможно, нам придется вручную анализировать тело и извлекать параметры, что не кажется легкой задачей. Нам нужно использовать его в производственной среде, поэтому я бы предпочел найти какой-нибудь существующий, пуленепробиваемый код, а не придумывать наш собственный.

Но странно то, что я не смог найти библиотеку, которая бы предлагала такой класс. Кто-нибудь может указать мне на такую ​​библиотеку? Вы уже использовали такой код в публичной, производственной среде?

Я также видел некоторые внутренние классы Tomcat, названия которых звучат многообещающе, например, «BufferedInputFilter» (http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/coyote/http11/filters/BufferedInputFilter.html)) - но этот фильтр не реализует стандартный ServletFilter, поэтому я не могу ли я его использовать и как.

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