構成

このセクションでは、Spring Data LDAP の構成について説明します。Spring LDAP リポジトリは、XML 構成で <data-ldap:repositories> タグを使用するか、構成クラスで @EnableLdapRepositories アノテーションを使用することによって有効にできます。

自動生成されたリポジトリに LdapQuery パラメーターのサポートを含めるには、インターフェースで CrudRepository ではなく LdapRepository を継承します。

すべての Spring LDAP リポジトリは、オブジェクトディレクトリマッピングに従って、ODM アノテーションが付けられたエンティティを操作する必要があります。

すべての ODM 管理クラスには ID として識別名が必要なため、すべての Spring LDAP リポジトリの ID 型 パラメーターが javax.naming.Name に設定されている必要があります。

実際、組み込みの LdapRepository (Javadoc) は、管理対象エンティティクラスという 1 つの型パラメーターのみを受け取ります。このクラスの ID はデフォルトで javax.naming.Name になります。

LDAP プロトコルの仕様により、ページングとソートは Spring LDAP リポジトリではサポートされていません。

org.springframework.ldap.odm.annotations.Id などの ODM アノテーションを使用する必要があります。Spring LDAP は独自のマッピング層を使用するため、Spring Data のアノテーションの使用は機能しません。

アノテーションベースの構成

Spring Data LDAP リポジトリのサポートは、次の例に示すように、JavaConfig とカスタム XML 名前空間の両方を通じてアクティブ化できます。

例 1: JavaConfig を使用した Spring Data LDAP リポジトリ
@Configuration
@EnableLdapRepositories("com.acme.*.repositories")
class MyConfig {

  @Bean
  ContextSource contextSource() {

    LdapContextSource ldapContextSource = new LdapContextSource();

    ldapContextSource.setUserDn("cn=Admin");
    ldapContextSource.setPassword("secret");
    ldapContextSource.setUrl("ldap://127.0.0.1:389");

    return ldapContextSource;
  }

  @Bean
  LdapTemplate ldapTemplate(ContextSource contextSource) {
    return new LdapTemplate(contextSource);
  }
}

この構成により、基本パッケージで LDAP リポジトリを継承するインターフェースがスキャンされ、見つかったそれぞれに対して Spring Bean が作成されます。

基本パッケージが構成されていない場合、インフラストラクチャーは、アノテーションが付けられた構成クラスのパッケージをスキャンします。

Spring ネームスペース

Spring Data の LDAP モジュールには、リポジトリ Bean の定義を可能にするカスタム名前空間が含まれています。また、LDAP に特有の特定の機能と要素属性も含まれています。通常、LDAP リポジトリは、次の例に示すように、repositories 要素を使用して設定できます。

例 2: ネームスペースを使用した LDAP リポジトリのセットアップ
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ldap="http://www.springframework.org/schema/ldap"
  xmlns:data-ldap="http://www.springframework.org/schema/data/ldap"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/ldap
    https://www.springframework.org/schema/ldap/spring-ldap.xsd
    http://www.springframework.org/schema/data/ldap
    https://www.springframework.org/schema/data/ldap/spring-ldap.xsd">

  <ldap:context-source url="ldap://127.0.0.1:389"
                     username="cn=Admin"
                     password="secret" />

  <ldap:ldap-template />

  <data-ldap:repositories base-package="com.acme.*.repositories" />

</beans>

この構成により、基本パッケージで LDAP リポジトリを継承するインターフェースがスキャンされ、見つかったそれぞれに対して Spring Bean が作成されます。

デフォルトでは、リポジトリは ldapTemplate と呼ばれるオートワイヤーされた LdapTemplate Spring Bean を取得するため、この規則から逸脱する場合にのみ ldap-template-ref を明示的に構成する必要があります。

JavaConfig と XML のどちらが優れていますか ? XML は、Spring がずっと前に構成された方法です。Java、レコード型、アノテーションなどが急速に成長している今日の時代では、通常、新しいプロジェクトではできる限り多くの純粋な Java が使用されます。XML サポートを削除する当面の計画はありませんが、最新の機能の一部は XML で利用できない場合があります。

repositories 要素を使用すると、リポジトリインスタンスの作成に従って Spring Data リポジトリが検索されます。

カスタム名前空間属性

repositories 要素のデフォルト属性に加えて、LDAP 名前空間は、リポジトリのセットアップをより詳細に制御できる追加の属性を提供します。

表 1: repositories 要素のカスタム LDAP 固有の属性

ldap-template-ref

LdapTemplate を明示的に接続して、repositories 要素によって検出されるリポジトリで使用します。通常、アプリケーション内で複数の LdapTemplate Bean が使用される場合に使用されます。構成されていない場合、Spring Data は、ApplicationContext で ldapTemplate という名前の LdapTemplate Bean を自動的に検索します。

Spring Data LDAP では、ldapMappingContext という名前の LdapMappingContext Bean が存在する必要があります。そのような Bean が定義されていない場合、Spring Data LDAP はアプリケーションコンテキストにデフォルトのインスタンスを登録します。