Leia o corpo POST de HTTPServletRequest E, em seguida, chame getParameter no Tomcat

Estou na situação em que meu aplicativo precisa inspecionar o conteúdo / data / body / payload de uma solicitação POST sem alterar os resultados de chamadas subsequentes de getParameter.

Lendo o corpo do inputStream:

O corpo pode ser lido usando o InputStream derequest.getInputStream ou BufferedReader derequest.getReader.

Lendo os parâmetros do POST:

As solicitações POST geralmente incluem parâmetros de solicitação no corpo da solicitação. Estes podem ser recuperados usandogetParameter.

O problema:

o primeirogetParameter chamada internamente analisa o inputStream e insere todos os parâmetros em um parâmetro HashMap. Isso requer que o inputStream ainda contenha o conteúdo para análise. Assim, não é possível inspecionar o conteúdo e ainda ter uma chamada getParameter funcional.

Solução proposta (mas não suficiente)

Crie um wrapper de solicitação que armazene em cache o fluxo de entrada e retorne o cache para getInputStream.

Eu vi essa solução sugerida em toda a web, mas não funciona, porquegetParameter na verdade não ligagetInputStream, mas refere-se ao inputBuffer original enterrado no objeto de solicitação. Eu tentei, tanto de dentro do Servlet e usando um filtro

A única solução que consigo pensar envolve reescrever getParameter para realmente analisar o inputstream em cache manualmente. Mas isso parece uma má ideia.

Alguém tem alguma alternativa que funcione? (Este é o Tomcat 5.5) Parece que deveria ser um caso de uso comum; Eu não posso acreditar como é difícil.

questionAnswers(2)

yourAnswerToTheQuestion