Может ли проект репозитория spring ldap получить доступ к двум разным каталогам ldap?

Я пытаюсь создать приложение Spring Rest для возврата значений, которые могут поступать с двух разных серверов каталогов ldap. Возможно ли это с помощью весенних репозиториев ldap? Можно ли создать более одного ldaptemplate и contextsource, чтобы я мог запрашивать оба каталога?


person robin karlin    schedule 09.06.2016    source источник


Ответы (1)


Вы можете настроить отдельные компоненты ldapTemplate и contextSource для каждого каталога LDAP.

Вы можете обратиться к следующей базовой конфигурации (JavaConfig);

@Configuration
@EnableLdapRepositories(basePackages = "com.foo.ldap1.repositories", ldapTemplateRef="ldapTemplate1")
public class Ldap1Configuration {

    @Autowired
    Environment env;

    @Bean
    public LdapContextSource contextSource1() {
        LdapContextSource contextSource= new LdapContextSource();
        contextSource.setUrl(env.getRequiredProperty("ldap1.url"));
        contextSource.setBase(env.getRequiredProperty("ldap1.base"));
        contextSource.setUserDn(env.getRequiredProperty("ldap1.user"));
        contextSource.setPassword(env.getRequiredProperty("ldap1.password"));
        return contextSource;
    }

    @Bean(name="ldapTemplate1")
    public LdapTemplate ldapTemplate1() {
        return new LdapTemplate(contextSource1());        
    }
}
@Configuration
@EnableLdapRepositories(basePackages = "com.foo.ldap2.repositories", ldapTemplateRef="ldapTemplate2")
public class Ldap2Configuration {
    @Bean
    public LdapContextSource contextSource2() {
        LdapContextSource contextSource= new LdapContextSource();
        contextSource.setUrl(env.getRequiredProperty("ldap2.url"));
        contextSource.setBase(env.getRequiredProperty("ldap2.base"));
        contextSource.setUserDn(env.getRequiredProperty("ldap2.user"));
        contextSource.setPassword(env.getRequiredProperty("ldap2.password"));
        return contextSource;
    }

    @Bean(name="ldapTemplate2")
    public LdapTemplate ldapTemplate2() {
        return new LdapTemplate(contextSource2());        
    }

}

Затем вы можете ссылаться на каждый экземпляр в своем приложении, как указано ниже:

@Autowired
@Qualifier("ldapTemplate1")
private LdapTemplate ldapTemplate1;
@Autowired
@Qualifier("ldapTemplate2")
private LdapTemplate ldapTemplate2;

Примечание; Если количество каталогов LDAP увеличивается, лучше реализовать фабрику ldaptemplate, которая принимает сведения о соединении и возвращает экземпляры ldaptemplate (пример).

person Mert Z.    schedule 22.06.2016
comment
Я пробовал это, но не мог понять, как подключить каждый ldapTemplate к репозиторию ldap. Я использую аннотацию @EnableRepositories в своем классе LdapConfiguration. Мне нужны разные классы репозитория ldap для разных каталогов ldap. - person robin karlin; 23.06.2016
comment
Вы можете установить свойство ldapTemplateRef для @EnableLdapRepositories, чтобы настроить имя используемого bean-компонента ldaptemplate. В вашем случае вам следует настроить отдельные классы конфигурации с отдельной аннотацией @EnableLdapRepositories для ваших каталогов LDAP. - person Mert Z.; 24.06.2016