私の spring-3 アプリケーションには、ユーザーの権限をチェックする AuthenticationInterceptor (基本的にはインターセプター) があります。Spring を使用してMultipartResolver
、ファイルをサーバーにアップロードしようとしています。私が今直面している問題は、ユーザー権限に基づいて異なるアクションを実行したいということMaxUploadSizeExceededException
です。ただし、この例外は DispatcherServlet レベルで発生しており、HandlerExceptionResolver
I want to be able to call my AuthenticationInterceptor before this fails?によってキャッチされていることがわかります。簡単な方法はありますか。
2 に答える
問題は、リクエストがコントローラーにディスパッチされる前に例外が発生することです。そのため、インターセプターも起動しません。あなたはすでにその部分を理解していると思います。
それを回避したい...
手始めに、サーブレットフィルタを使用して、認証メカニズムをサーブレットの前面に移動します。そうは言っても、Spring Securityのような優れた製品があなたのためにそれを行うことができるとき、そのスペースであなた自身のソリューションを展開することはほとんどまたはまったく意味がありません。
Spring Security(または同様のもの)に移行すると、ユーザーのSecurityContext(ロール、アクセス許可など)は、例外が発生してキャッチされるまでに解決されます。
さて、あなたの質問を正しく読んでいれば、ユーザーの役割や権限などに基づいて、例外に異なる方法で対応したいと思うかもしれません。これはこの時点で可能であるはずです。SecurityContextを検査して、ユーザーが特定の役割または権限を持っているかどうかを確認し、それに応じて応答するカスタムHandlerExceptionResolverを実装します。
お役に立てば幸いです。
Handler コードが呼び出される前にストリーム内で何かを処理するには、次の 2 つの基本的な方法があります。
- インターフェイスを実装し、メソッド
HandlerInterceptor
で実行するコードをコーディングしますpreHandle
@Aspect
ポイントカットを使用してアスペクトを作成し@Before
、メソッド呼び出しを実行するように構成します
どちらの場合でも、ログインしているユーザーの役割を確認し、SecurityContextHolder.getContext().getAuthentication().getAuthorities()
役割のメンバーシップに基づいて何をすべきかを決定できます。