2016-06-30 4 views
1

Grails 3.1.9アプリケーションのコンテナ管理による認証からSpring Securityプラグインへの移行。コンテナ管理の世界では、Grailsのインターセプタは保護されたリソースに対してAFTER認証を実行しました。しかし、(前に()ロジック付き)春のセキュリティ、インターセプタで次の順序で実行します。保護されたリソースへ認証とアクションの実行の間にインターセプタを実行できますか?

  1. コール
  2. インターセプタスタックをインターセプト要求、ログインページ
  3. を形成するためにリダイレクト真
  4. を返します。私たちは、そのshoulインターセプタを持っている要求されたリソース

  • 成功した認証
  • リダイレクト認証されたユーザーに対してのみ起動します。このフローの代わりにステップ4 & 5の間でインターセプタを実行する方法がありますか?あるいは、インターセプタロジックがSpring Securityフィルタに移行する必要があるのでしょうか?

  • +0

    私はこの質問と同じ要件を持っていますが、答えに従うことができませんでした。私はintellijやgrailsのrun-appから実行したときにうまく動作するインターセプタを書きましたが、Tomcatにwarファイルとして展開すると、すべての地獄がなくなります。私のトークンは認証されますが、springSecurityService.principal = nullになります。詳細はこの質問にあります。 –

    答えて

    2

    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に記載されています。

    +0

    私はこの質問と同じ要件を持っていますが、答えに従うことができませんでした。私は 'intellij'や' grails run-app'から実行する際にうまく動作するインターセプタを書いていましたが、Tomcatにwarファイルとして展開するとすべての地獄がなくなります。私のトークンは認証されますが、私は 'springSecurityService.principal = null'を取得します。詳細はこの[質問](https://stackoverflow.com/questions/43999961/springsecurityservice-principal-returns-null-when-deployed-as-a-war-in-tomcat-8)にあります。 –

    関連する問題