Spring ldap Spring ldap Embedded未设置ldap模板库

9wbgstp7  于 2022-10-23  发布在  Spring
关注(0)|答案(1)|浏览(211)

来测试一项ldap服务。我按如下方式设置了嵌入式LDAP配置:

spring:
  ldap:
    base: OU=Internals,DC=int,DC=springboot,DC=dev
    username: uid=admin
    password: secret
    urls: ldap://localhost:8389/
    embedded:
      base-dn: DC=springboot,DC=dev
      credential:
        username: uid=admin
        password: secret
      ldif: classpath:export2-ldap.ldif
      port: 8389
      validation:
        enabled: false

我注意到ldaptemplate基数设置不正确:

我深入研究了EmbeddedLdapAutoConfigurationLdapAutoConfiguration代码,注意到EmbeddedLdapAutoConfiguration在LdapAutoConfiguration类之前创建了一个不带基础的Bean LdapContextSource

@Configuration(proxyBeanMethods = false)
    @ConditionalOnClass(ContextSource.class)
    static class EmbeddedLdapContextConfiguration {

        @Bean
        @DependsOn("directoryServer")
        @ConditionalOnMissingBean
        LdapContextSource ldapContextSource(Environment environment, LdapProperties properties,
                EmbeddedLdapProperties embeddedProperties) {
            LdapContextSource source = new LdapContextSource();
            if (embeddedProperties.getCredential().isAvailable()) {
                source.setUserDn(embeddedProperties.getCredential().getUsername());
                source.setPassword(embeddedProperties.getCredential().getPassword());
            }
            source.setUrls(properties.determineUrls(environment));
            return source;
        }

    }

是否正常,不能同时使用spring.ldap.base和spring.ldap.Embedded。*?或者可能是我的项目中的某些设置不正确。

zed5wv10

zed5wv101#

我通过以下几点绕过了这个问题:

@Bean
public LdapContextSource createLdapConfig(LdapProperties properties, Environment environment,
        ObjectProvider<DirContextAuthenticationStrategy> dirContextAuthenticationStrategy) {
    LdapAutoConfiguration config = new LdapAutoConfiguration();
    return config.ldapContextSource(properties, environment, dirContextAuthenticationStrategy);
}

正如@Saikat所指出的,它似乎既是Spring,也是unboundo嵌入式LDAP服务器被配置为创建一个LdapContextSource,如果它还不存在的话……听起来嵌入式LDAP服务器赢得了这场竞赛,但却把其他所有人的事情都搞砸了。
上面的代码通过强制创建/配置LdapContextSource来绕过这个问题,从而不让Spring或嵌入式LDAP服务器尝试创建LdapContextSource

相关问题