【问题标题】:Can a spring ldap repository project access two different ldap directories?spring ldap 存储库项目可以访问两个不同的 ldap 目录吗?
【发布时间】:2016-06-24 15:01:43
【问题描述】:

我正在尝试创建一个 spring rest 应用程序来返回可能来自两个不同 ldap 目录服务器的值。这可以使用spring ldap存储库吗?是否可以创建多个 ldaptemplate 和 contextsource,以便我可以查询两个目录?

【问题讨论】:

    标签: ldap spring-ldap


    【解决方案1】:

    您可以为每个 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 实例 (example)。

    【讨论】:

    • 我已经尝试过了,但无法弄清楚如何将每个 ldapTemplate 连接到 ldap 存储库。我在我的 LdapConfiguration 类上使用 @EnableRepositories 注释。我需要为不同的 ldap 目录设置不同的 ldap 存储库类。
    • 您可以设置@EnableLdapRepositoriesldapTemplateRef 属性以配置要使用的ldaptemplate bean 的名称。在您的情况下,您应该为您的 LDAP 目录配置具有单独 @EnableLdapRepositories 注释的单独配置类。
    猜你喜欢
    • 2018-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2020-07-24
    • 2014-02-28
    相关资源
    最近更新 更多