web.xmlファイルがあるので、2.xアプリケーションのフローを見るともう少し明確になります。web.xmlファイルはいくつかの部分がどのような順序で実行されているかが明確ですが、基本的には2.xと同じです3.x。
プラグインのフィルタチェーンは1つのフィルタとして登録されており、grailsWebRequest
フィルタの後、ただしGrailsDispatcherServlet
の前に実行されるように設定されています。これは、デフォルトとは異なるURLマッピングを持つ注釈付きコントローラをサポートするためです(たとえば、PersonController.show()
は/person/show
にマップされるかもしれませんが、アプリはそれを任意の有効なURI(およびREST動詞の組み合わせ)にマップしている可能性があります。フィルタリングされたURLマッピングインスタンスを検索して、現在のリクエストに対して実行されるコントローラアクションを特定できるようにする必要があります。フィルタでは、どのURLが要求されているかを知っていますが、コントローラにはどのようなルールが適用されるのか分かります。
サーブレットはフィルタの後に実行され、コントローラが特定されて呼び出されます。 2.xでサーブレットフィルタと混同しないでください)は、実際にはcomを取得するSpring HandlerInterceptorですHandlerExecutionChain
に「ハンドラ」と一緒に提出されました。これはどのタイプのリクエストでも機能するように一般的ですが、実際はハンドラはコントローラなので、スコープはサーブレットフィルタよりもはるかに狭いです。
実際の質問に戻るには、Spring Securityフィルタチェーンに追加されたフィルタで作業するのが最善の方法です。これらは実装が非常に簡単で、プロセスはplugin docsに記載されています。
私はこの質問と同じ要件を持っていますが、答えに従うことができませんでした。私はintellijやgrailsのrun-appから実行したときにうまく動作するインターセプタを書きましたが、Tomcatにwarファイルとして展開すると、すべての地獄がなくなります。私のトークンは認証されますが、springSecurityService.principal = nullになります。詳細はこの質問にあります。 –