Я пытаюсь создать приложение Spring Rest для возврата значений, которые могут поступать с двух разных серверов каталогов ldap. Возможно ли это с помощью весенних репозиториев ldap? Можно ли создать более одного ldaptemplate и contextsource, чтобы я мог запрашивать оба каталога?
Может ли проект репозитория spring ldap получить доступ к двум разным каталогам ldap?
Ответы (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
Я пробовал это, но не мог понять, как подключить каждый ldapTemplate к репозиторию ldap. Я использую аннотацию @EnableRepositories в своем классе LdapConfiguration. Мне нужны разные классы репозитория ldap для разных каталогов ldap.
- person robin karlin; 23.06.2016
Вы можете установить свойство
ldapTemplateRef для @EnableLdapRepositories, чтобы настроить имя используемого bean-компонента ldaptemplate. В вашем случае вам следует настроить отдельные классы конфигурации с отдельной аннотацией @EnableLdapRepositories для ваших каталогов LDAP.
- person Mert Z.; 24.06.2016