現在の Spring3 REST JSON API は、デフォルトの InMemory プロパティ ファイル/basic-authentication 認証マネージャーで認証されています。これまでのところ問題なく機能していますが、そのユーザーに対して着信要求を行うことが許可されていることをさらに検証する必要があります。Role の概念は、特定のコントローラーの URL へのエントリのゲートウェイとしてはうまく機能しているように見えますが、ユーザーが要求されたデータを要求することを許可されていることを検証するには十分ではありません。
私のアプリでは、API にリクエストを行う各 B2B パートナーに applicationId が割り当てられます。そのパートナー ユーザー アカウントは、その applicationId のリクエストのみを許可されます。applicationId は、すべての POST API メッセージの RequestBody POJO の属性として渡されます。不適切なアプリケーション ID に対するリクエストは拒否したいと思います。
認証されたユーザーが許可されたリクエストを行っていることを確認するにはどうすればよいですか?
カスタム AuthenticationProvider を作成する道を歩み始めましたが、まだ Java Bean にマーシャリングされていない RequestBody Bean 内の applicationId にアクセスする方法がわかりません。
おそらく、カスタム AuthenticationProvider は適切なソリューションではなく、何らかのリクエスト バリデータが必要です。その場合、appId 属性のバリデーターはどのようにしてプリンシパル (認証されたユーザー オブジェクト) にアクセスできますか?
どのような解決策でも、コントローラーには見えないようにして、コントローラーに送信される要求が許可されるようにしたいと思います。また、理想的には、ソリューションは、ロジックを機能させるために何らかの注釈を覚えておくことをエンジニアに依存すべきではありません。
前もって感謝します、ジェイソンV
編集 1: コントローラーに InitBinder を実装し、RequestBody で @Valid アノテーションを使用することで、リクエストを検証できました。ただし、これは私が探しているドロイド (つまり解決策) ではありません。これらすべてのバインダーと注釈なしでそれを処理するためのより一般的な方法を見つける必要があります。覚えておく必要がありすぎて、数十のリクエストコントローラーにまたがってアプリケーションに広まり、将来的には忘れ去られるでしょう。