【发布时间】:2016-06-24 15:01:43
【问题描述】:
我正在尝试创建一个 spring rest 应用程序来返回可能来自两个不同 ldap 目录服务器的值。这可以使用spring ldap存储库吗?是否可以创建多个 ldaptemplate 和 contextsource,以便我可以查询两个目录?
【问题讨论】:
标签: ldap spring-ldap
我正在尝试创建一个 spring rest 应用程序来返回可能来自两个不同 ldap 目录服务器的值。这可以使用spring ldap存储库吗?是否可以创建多个 ldaptemplate 和 contextsource,以便我可以查询两个目录?
【问题讨论】:
标签: ldap spring-ldap
您可以为每个 LDAP 目录配置单独的 ldapTemplate 和 contextSource bean。
可以参考下面的基本配置(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 实例 (example)。
【讨论】:
@EnableLdapRepositories 的ldapTemplateRef 属性以配置要使用的ldaptemplate bean 的名称。在您的情况下,您应该为您的 LDAP 目录配置具有单独 @EnableLdapRepositories 注释的单独配置类。