0

注: 私のアプリケーションは、Spring フレームワークの最新バージョンである 4.0.6、3.2.4 をセキュリティのために使用しており、xml を使用せずに Java-Config のみを使用してアプリケーションを構成しています。

役割やその他のビジネス固有の承認条件で保護したい一連のサービスがあります。このサービスは、REST アプリケーションと Web アプリケーションで使用されるモジュール (jar) にグループ化されます。私はすでにAuthenticationProviderWeb アプリケーションに を持っています (REST アプリケーションは初期段階にあります)。@EnableGlobalMethodSecurityWeb アプリケーションで使用します。そうは言っても、サービスのメソッドも保護する必要があります。その場合、別の認証プロバイダーを提供する必要がありますか? または、認証プロバイダーをサービス モジュールに移動して、Web/Rest アプリがサービス jar の認証プロバイダーを使用するのは正しいですか? サービス モジュールの ApplicationServiceConfig.java で構成@EnableGlobalMethodSecurityすると、ブロー例外が発生します。

com.name.mvoice.project.service.ApplicationServiceConfig: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: An AuthenticationManager is required

アプリケーションが RDBMS からの認証と LDAP からの認証の二重認証を必要とする場合、どのようにセキュリティーを構成すればよいですか。条件は、ユーザー情報が存在し、両方のシステムで有効になっている必要があります。これを既存の認証マネージャー自体に記述する必要がありますか?それとも LDAP 用に別の認証プロバイダーを用意する必要がありますか? もしそうなら、どのように?

WebSecurityConfig.java

 @Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
        throws Exception {
    AuthenticationProvider dbAuthenticationProvider = new DatabaseAuthenticationProvider();
    auth.authenticationProvider(dbAuthenticationProvider );
    // is it right to do like this
   AuthenticationProvider ldapAuthenticationProvider = new LDAPAuthenticationProvider();
    auth.authenticationProvider(ldapAuthenticationProvider );
 }

ただし、AuthenticationManagerBuilder.authenticationProvider提供された認証プロバイダーがリストに追加されているようです!

4

1 に答える 1

0

いいえ、これでは望ましい結果が得られません。デフォルトの Spring Security 実装は、一度に 1 つだけを使用しますAuthenticationProvider。への 2 番目の呼び出しは、auth.authenticationProvider()Spring Security が LDAP プロバイダーのみを使用するように強制します。

あなたが望むものを達成するために

ステップ 1 : 独自のクラスを作成します。

public class CompositeAuthenticationProvider implements AuthenticationProvider {}

ステップ 2 : 次に、データベースと LDAP プロバイダーを挿入します。

ステップ 3 :authenticateクラスのメソッドで、CompositeAuthenticationProvider必要に応じてデータベース プロバイダーと LDAP プロバイダーの間で要求を調整します。両方のプロバイダーから取得した結果に基づいて応答を返します。

于 2014-08-16T06:25:32.583 に答える