SpringBoot LDAPTemplate 嵌入式与真正的 LDAP

SpringBoot LDAPTemplate Embedded vs Real LDAP

我在我的 SpringBoot 应用程序中使用下面提到的属性,在 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

我使用 @profile 注释配置了我的 LDAPTemplate,它可以区分本地和服务器环境,并实现了我上面的要求。下面是我的配置。对于本地环境,具有 embedded-properties 足以使 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 启动将使用我的嵌入式 LDAP,但在云配置文件中,它将执行实际的 LDAP 服务器。

谢谢 A运行