Lea el cuerpo POST de HTTPServletRequest Y luego llame a getParameter en Tomcat

Estoy en la situación en la que mi aplicación necesita inspeccionar el contenido / datos / cuerpo / carga útil de una solicitud POST sin cambiar los resultados de las llamadas subsiguientes de getParameter.

Leyendo el cuerpo desde el inputStream:

El cuerpo puede leerse usando el InputStream desderequest.getInputStream o BufferedReader desderequest.getReader.

Lectura de parámetros POST:

Las solicitudes POST suelen incluir parámetros de solicitud en el cuerpo de la solicitud. Estos pueden ser recuperados usandogetParameter.

El problema:

el primerogetParameter call internamente analiza el inputStream e inserta todos los parámetros en un parámetro HashMap. Requiere que inputStream aún contenga el contenido para el análisis. Por lo tanto, no se puede inspeccionar el contenido y aún tener una llamada de getParameter que funcione.

Solución propuesta (pero no suficiente)

Cree un contenedor de solicitud que almacene en caché la corriente de entrada y devuelva el caché para getInputStream.

He visto esa solución sugerida en toda la web, pero no funciona, porquegetParameter en realidad no llamagetInputStream, pero se refiere al inputBuffer original enterrado en el objeto de solicitud. Lo he probado, tanto desde dentro del Servlet como usando un filtro

La única solución que se me ocurre es la reescritura de getParameter para analizar la entrada en caché manualmente. Pero esto se siente como una mala idea.

¿Alguien tiene alguna alternativa que funcione? (Esto es Tomcat 5.5) Esto parece que debería ser un caso de uso común; No puedo creer lo difícil que es.

Respuestas a la pregunta(2)

Su respuesta a la pregunta