ファイルを取得することなく、マルチパートリクエストからフォームパラメータを取得します。
-
20-09-2019 - |
質問
私は(まだ)ファイルをアップロードすることなく、サーブレット・フィルターでHTTPマルチパートリクエストのフォームパラメータを取得する方法を探しています。
request.getParameterMap()空返します。私は、これが原因でマルチパートという要求であることを理解ます。
私はcommons.HttpFileUploadを見てきましたが、これは私のような状況のためにやり過ぎのようです。このフィルタでは、私は、通常のパラメータでのみ興味があり、まだファイルアップロードを処理する必要はありません。
編集:主な問題は、私はHttpRequestObjectさらにフィルタスタックダウンそのままを持っている必要があるということです。 HttpFileUploadは、リクエストデータの一部を消費しているようです(おそらくデータストリームオブジェクトを使用して、もう一度それを閉じること。)
解決
それは正しい方法とパーサを自分で書くよりも常に良いですが、確かにやり過ぎではありません。 のApache CommonsののFileUpload には、開発と維持年間、およびマルチパート/フォームのデータ要求を処理するには、その堅牢性を証明していています。あなたは車輪の再発明する必要はありません。あなたが本当に(私はそれをお勧めしません)それをしたい場合は、href="http://www.faqs.org/rfcs/rfc1867.html" rel="noreferrer">マルチパート/フォームとHttpServletRequest#getInputStream()
(警告!:これはバイナリと文字データの混在である)を読んで開始します。
あなたは、必要な場合もフードとチェックの下ですべての要求をApacheのコモンズのFileUploadを使用するフィルターを書くことができますコモンズのFileUploadと、それはあなたのサーブレットコードでもう少し透過ようやくだように、要求属性としてアップロードされたファイル(または例外)を置きます。あなたはをここに見つけることができるアイデアを得るために基本的な例をを。
この情報がお役に立てば幸いです。
他のヒント
Oreillyサーブレットのウェブサイトは、カスタマイズダウンロードして使用することができますいくつかのサンプルコードがあります。これは何をしているように聞こえる MultipartRequest に含まれますそのアンボックスマルチパートリクエスト、必要と個別のパラメータやファイルへのアクセスを可能にします。
ただ、すでに提供の回答に追加する - 私は私は当社の既存のWebアプリケーションにいくつかのCSRFの検証を追加しようとしていたという点で、非常に同様の問題がありました。我々はいくつかのJSを使用して、各形態の特別なトークンを含むトークンが(従って、一般的な、単離された溶液)に存在することを確認するために、サーブレットフィルタを追加することを決定した。
トークンが存在していたが、ファイルのアップロードオプションを提供し、すべてのフォームのために壊れた場合、サーブレットはチェックします。いくつかのグーグルをしながらそれゆえ、私は頻繁にこのページに上陸します。
私たちの周りの仕事は(アップロードされたファイルを持つすべての取引を避けるためにしようとしたときに)使用されているいくつかのJavaScriptはGETパラメータとしてトークンを追加するために取得するには、すなわち私たちは、トークンが含まれるように、フォームのアクションURLを変更したため、使用することができますHttpServletRequest.getParameter()トークンのための方法(およびのみトークン)。
私はIE、FFとChromeでこれをテストしているし、すべてが幸せであるように見える。
これも似たような状況で自分自身を見つけた人を助けることを望みます。
・コモンズのFileUploadは、マルチパートフォームのアップロードからのリクエストパラメータを読み取るための機構を提供します。
ここでリクエストパラメータをつかむ方法の本当に素晴らしい例があります: