一个 Spring LDAP 存储库项目可以访问两个不同的 ldap 目录吗?



我正在尝试创建一个弹簧休息应用程序来返回可能来自两个不同LDAP目录服务器的值。 使用Spring LDAP存储库可以做到这一点吗? 是否可以创建多个ldaptemplatecontextsource以便我可以查询两个目录?

您可以为每个 LDAP 目录配置单独的 ldapTemplatecontextSource 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实例(示例)。

最新更新