後続の getParameter 呼び出しの結果を変更せずに、アプリケーションが POST 要求のコンテンツ/データ/本文/ペイロードを検査する必要がある状況にあります。
inputStream から本文を読み取る:
request.getInputStream
本文は、 InputStream fromまたは BufferedReader fromを使用して読み取ることができますrequest.getReader
。
POST パラメータの読み取り:
通常、POST リクエストには、リクエストの本文にリクエスト パラメータが含まれます。これらは、 を使用して取得できますgetParameter
。
問題:
最初のgetParameter
呼び出しは、inputStream を内部的に解析し、すべてのパラメーターをパラメーター HashMap に挿入します。解析用のコンテンツを含むためには、inputStream が必要です。したがって、コンテンツを検査することはできず、まだ getParameter 呼び出しが機能しています。
提案された (しかし十分ではない) 解決策
入力ストリームをキャッシュし、getInputStream のキャッシュを返すリクエスト ラッパーを作成します。
私はその解決策がウェブ全体で提案されているのを見てきましたが、getParameter
実際には を呼び出すgetInputStream
のではなく、リクエストオブジェクトに埋め込まれた元の inputBuffer を参照しているため、機能しません。サーブレット内とフィルターを使用して試してみました
私が考えることができる唯一の解決策は、キャッシュされた入力ストリームを手動で実際に解析するように getParameter を書き直すことです。しかし、これは悪い考えのように感じます。
誰かが機能する代替手段を持っていますか? (これは Tomcat 5.5 です) これは一般的な使用例のように感じます。信じられないほど難しい。