1

ユーザーが 2 つの異なる認証方法から選択する必要があるアプリケーションがあります。1 つはユーザー名/パスワード認証で、もう 1 つはユーザー名/パスワード/ワンタイム パスワードです。

追加の認証プロバイダーを作成しましたが、http://burtbeckwith.com/blog/?p=1090 で行ったように、resources.groovy でdaoAuthenticationProviderプロバイダーをオーバーライドするとうまく機能します。

ただし、認証方法が標準の daoAuthenticationProvider と並んで存在する必要がある場合、私は少し立ち往生しています。

カスタム認証プロバイダーとカスタム フィルターが resources.groovy に登録されていることはわかっています。問題は、url("redirect /my_auth to the filter") をカスタム フィルターでインターセプトする方法です。

4

1 に答える 1

1

resources.groovy にフィルターを登録する代わりに、Config.groovy の filterChain 構成を使用してこれを行うことができます。スプリング セキュリティが filterchain.filterNames で使用するすべてのフィルターを宣言します。これには、必要な標準フィルターとカスタム フィルターの両方が含まれます。

grails.plugins.springsecurity.filterChain.filterNames = [
   'securityContextPersistenceFilter', 'logoutFilter',
   'authenticationProcessingFilter', 'firstCustomFilter','secondCustomFilter',
   'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter',
   'exceptionTranslationFilter', 'filterInvocationInterceptor'
]

次に、カスタム フィルターを特定の URL にマップします。除外を使用してこれを行う 1 つの方法は次のとおりです。

grails.plugins.springsecurity.filterChain.chainMap = [
    '/customUrlOne/**': 'JOINED_FILTERS,-secondCustomFilter',
    '/customUrlTwo/**': 'JOINED_FILTERS,-firstCustomFilter',
    '/**':  'JOINED_FILTERS,-firstCustomFilter,-secondCustomFilter'
]

JOINED_FILTERSは、最初のマップで宣言したすべてのフィルターのセットです。「/**」の下では、除外されたカスタム フィルターを除くすべてのフィルターがアクティブになります。同様に、カスタム URL の下では、他の URL 用に除外されたカスタム フィルターを除いたすべてのフィルターがアクティブになります。これにより、customUrlOne へのトラフィックがfirstCustomFilterによってインターセプトされ、customUrlTwoへのトラフィックがsecondCustomFilterによってインターセプトされるようになります

于 2012-07-04T20:29:17.873 に答える