0

これは app-security.xml にあり、ユーザーが LDAP にログインしている場合はいくつかのタスクを実行し、ユーザーが DB にログインしている場合は他のタスクを実行したいと考えています。

    <ldap-server url="ldap://192.168.0.55:389/dc=fluxit,dc=com,dc=ar"
                   manager-dn="uid=admin,ou=system" 
                   manager-password="infra123" 
  />


    <authentication-manager>

        <authentication-provider user-service-ref='databaseAuthManager'>
            <password-encoder ref="encoder" />
        </authentication-provider>

        <authentication-provider>
            <password-encoder ref="encoder" />
            <user-service id="textFileAuthManager" properties="classpath:auth/users.properties" />
        </authentication-provider>

        <ldap-authentication-provider
            user-search-filter="(uid={0})" user-search-base="ou=users"
            group-search-filter="(uniqueMember={0})" group-search-base="ou=groups"
            group-role-attribute="cn" role-prefix="ROLE_">
        </ldap-authentication-provider>


    </authentication-manager>

春にできるかな?私はしばらくの間グーグルをしてきましたが、答えが見つかりませんでした。

どうもありがとう!

4

1 に答える 1

1

あなたの要件の難しさは、特定の認証プロバイダーが実際にリクエストを認証した情報を認証マネージャーが保持していないことだと思います。その情報があればAuthenticationSuccessHandler、成功した認証方法に依存する動作を実装するカスタムを簡単に作成できます。

この機能が本当に必要な場合は、私が思いつく解決策の 1 つProviderManagerを次に示します。成功した認証プロバイダーへの参照を保存するデコレーターで認証オブジェクトをラップする custom を実装します。の実装はProviderManagerこれに使用できる拡張ポイントを提供しないため、基本的にはクラス全体をコピーして必要な拡張を行う必要があります。次に、デフォルトの実装<authentication-manager>を置き換えることができないため、セキュリティ名前空間を使用せずに構成全体を書き直す必要があります。AuthenticationManager

これはあまりにもエレガントでも簡単な解決策でもないので、もっと良い方法があるかもしれません。

于 2013-03-14T14:11:50.927 に答える