上記のServletの仕様書のセクション3.1.1に書かれている通りなんですけどね。
- POST method
- content typeが
application/x-www-form-urlencoded
- requestオブジェクトのgetParameter系のメソッドを呼び出す
という条件が揃うと、servletコンテナ側でinputStreamが消費されてしまうので、アプリケーション側で読み込むことができない、とのこと。
読み込み用のメソッドを使っただけでオブジェクトの状態が変わるのって…という感じですが、アプリケーション側からするとraw dataの状態で検査したいことも有ったりして、おせっかいな機能ですね。
ほかにもbody部のパラメータと、URLのパラメータを勝手に1つのMapにミックスしたりと、「それ必要?」感の有る仕様が有ったりしますね。
servletベースのWAFはどうやって回避しているのでしょうか?
Scalatraでずっとissueが残っていますが、特にservletがバージョンアップしても回避策は無さそうなので、APIに注意喚起するPRだけ作っておきました。