Lesen Sie den POST-Body von HTTPServletRequest und rufen Sie dann getParameter in Tomcat auf

Ich bin in der Situation, in der meine Anwendung den Inhalt / die Daten / den Körper / die Nutzdaten einer POST-Anforderung überprüfen muss, ohne die Ergebnisse nachfolgender getParameter-Aufrufe zu ändern.

Den Body aus dem inputStream lesen:

Der Body kann mit dem InputStream von gelesen werdenrequest.getInputStream oder BufferedReader vonrequest.getReader.

POST-Parameter lesen:

POST-Anforderungen enthalten normalerweise Anforderungsparameter im Hauptteil der Anforderung. Diese können mit abgerufen werdengetParameter.

Das Problem:

Der ErstegetParameter call analysiert den inputStream intern und fügt alle Parameter in eine Parameter-HashMap ein. Der inputStream muss weiterhin den Inhalt für das Parsen enthalten. Daher kann man den Inhalt nicht überprüfen und hat immer noch einen funktionierenden getParameter-Aufruf.

Vorgeschlagene (aber nicht ausreichende) Lösung

Erstellen Sie einen Anforderungswrapper, der den Eingabestream zwischenspeichert und den Cache für getInputStream zurückgibt.

Ich habe diese Lösung im ganzen Web gesehen, aber sie funktioniert nicht, weilgetParameter ruft eigentlich nicht angetInputStreambezieht sich jedoch auf den ursprünglichen inputBuffer, der im Anforderungsobjekt vergraben ist. Ich habe es versucht, sowohl aus dem Servlet heraus als auch mit einem Filter

Die einzige Lösung, die ich mir vorstellen kann, besteht darin, getParameter neu zu schreiben, um den zwischengespeicherten Eingabestream tatsächlich manuell zu analysieren. Aber das fühlt sich nach einer schlechten Idee an.

Hat jemand eine Alternative, die funktioniert? (Dies ist Tomcat 5.5) Dies scheint ein allgemeiner Anwendungsfall zu sein. Ich kann nicht glauben, wie schwierig es ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage