0

私はJerseyを使用して、既存のレガシーサービスを置き換えるRESTfulサービスを構築しています。

従来のリクエスト形式では、POSTリクエストの本文で認証クレデンシャルを渡す必要があります。これにより、Jerseyにリクエストを渡す前に(Springセキュリティを使用して)リクエストを検証するのが面倒になります。これは、POST本体を読み取って認証資格情報を抽出し、Jerseyに渡す前に再パッケージ化する必要があるためです。

つまり、POSTリクエストごとに、リクエストストリームを読み取り、再シリアル化してから、Jerseyによって再度読み取る必要がありますMessageBodyReader。非効率的なので、私はこれが好きではありません。理想的には、私がやりたいのは、着信メッセージを正規のメッセージ形式に変換し、それを認証してから、その正規の形式をJerseyに渡すことです。JAX-RSがそのようなことをサポートしているようには見えません。

リクエスト本文のこの二重読み取りを回避する方法について、誰かが推奨事項を持っていますか?の代わりにカスタムの標準的なメッセージ形式を使用できるRESTfulフレームワークはありInputStreamますか?

ありがとう!

4

1 に答える 1

0

ここにはいくつかのオプションがあります。

最も簡単なのは、メッセージ本文を読み込み、それを使用してフィルターで資格情報を確認することです。ただし、これを行う場合InputStreamは、データを設定して、ダウンストリームのフィルター(および最終的にはメッセージ本文リーダー)にデータを渡すことができるようにする必要があります。このように聞こえますが、これまでのやり方に固執することをお勧めします。生の入力文字列があり、変換せずに渡すことができるため、再シリアル化する必要はありませんInputStream。入力が整形式であれば、完全なシリアル化も回避できる可能性があります。

または、資格情報を確認すると同時に、すべてを何らかの説明の正規オブジェクトに変換し、これをリソースからアクセスできる要求変数として保存することもできます。これの問題は、あなたがジャージーのやり方と戦っているということですので、私はそれをお勧めしません。リソースメソッドは部外者には少し奇妙に見えます。また、フィルターはモデルについてすべてを知る必要があるため、デザインは少し厄介です。

于 2013-02-24T09:16:51.013 に答える