とか言って騙されたよ!2時間はハマったわ!
サーブレットクラスに@MultipartConfigをつけなければ、Part#getPart(...)はnullを返す、そこまでは最初に把握したのだが、それをしっかりつけてんのにやはりnull。
なんじゃそりゃあ、と思ったら、フィルターを併用している場合はこれじゃ動かないとか。仕様なのかバグなのかよくわからないけど。
で、解決のためのおまじないが、server.xmlのContext要素(Webアプリの名前とか書いてあるやつ)に、
<Context allowCasualMultipartParsing="true" docBase="...
と、 allowCasualMultipartParsing="true" を追加する。
これをやるとMultipartConfigがそもそもなしでもよくなるらしいが、それはともかくフィルターがあってもgetPartはちゃんと値を返すようになりました!
・・・まだその後に普通のバグがあって動いてないけど!