タイトル通り。今日1日まるごと、この件の調査で潰れた。 ひたすらTomcatのコードをデバッガーで追いかけてました。
まだ部屋の掃除(※週末の固定タスク)もしてないのに…!!(怒)
さて。 例えば、サーブレットフィルタで入力ストリームをデコードするように自作のHttpServletRequestをラップするなどしても、 その後のフィルターチェーンでHttpServletRequest.getPartsを呼んでも、結果は必ず空になります。
この動作がTomcatのバグなのか仕様なのかは知りません。
解決策
commons-fileuploadを使って自前でパースしましょう。
事実上、Tomcat同梱のマルチパートのパース処理と同じものですが、処理のタイミング等が違うのでうまくいきます。