SpringBoot LDAPTemplate Embedded与Real LD​​AP

时间:2018-03-29 14:58:59

标签: spring spring-boot spring-cloud spring-ldap

我在SpringBoot App中使用下面提到的属性,在application.yml文件中使LDAP代码在我的本地计算机上运行。

spring:
  ldap:
    # Use this embedded configuration for local ldap testing
    embedded:
      base-dn: o=localcompany,c=US
      credential:
        username: uid=admin
        password: secret
      ldif: classpath:schemas.ldif
      port: 12345
      validation:
        enabled: false
    # Use this below configuration for Ford ldap
#    urls: ldaps://mmm.mmm.com:754
#    base-dn: o=****,c=US
#    username: 
#    password: {your password goes here}

我希望同时拥有我的嵌入式配置和实际配置存在于我的应用程序中,因此它可以在本地以及我的云环境中运行。但是,即使在云环境中,在我的yml文件中使用嵌入式属性也会覆盖实际属性。有没有办法同时拥有这两个属性,然后根据环境,连接LDAPTemplate

1 个答案:

答案 0 :(得分:1)

我使用@profile注释配置了我的LDAPTemplate,这可以区分本地和服务器环境并实现我上面提到的。以下是我的配置。对于本地环境,具有嵌入属性足以使LDAPTemplate正确连接

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;

@Configuration
@Profile("cloud")
public class LDAPConfiguration {

    @Value("${ldap.url}")
    private String ldapUrl;

    @Value("${ldap.base}")
    private String ldapBase;

    @Value("${ldap.username}")
    private String ldapUser;

    @Value("${ldap.password}")
    private String ldapPassword;

    @Bean
    public LdapTemplate configureLdapTemplateForCloud() {
        return new LdapTemplate(contextSource()) ;
    }

    private LdapContextSource contextSource() {

        LdapContextSource ldapContextSource = new LdapContextSource();

        ldapContextSource.setUrl(ldapUrl);
        ldapContextSource.setBase(ldapBase);
        ldapContextSource.setUserDn(ldapUser);
        ldapContextSource.setPassword(ldapPassword);

        ldapContextSource.afterPropertiesSet();
        return ldapContextSource;
    }

}

现在,当我在本地运行时,Spring Boot将使用我的嵌入式LDAP,但在云配置文件中,它将执行实际的LDAP服务器。

由于 阿伦