我正在尝试创建一个弹簧休息应用程序来返回可能来自两个不同LDAP目录服务器的值。 使用Spring LDAP存储库可以做到这一点吗? 是否可以创建多个ldaptemplate
和contextsource
以便我可以查询两个目录?
您可以为每个 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
实例(示例)。