来测试一项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
基数设置不正确:
我深入研究了EmbeddedLdapAutoConfiguration
和LdapAutoConfiguration
代码,注意到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。*?或者可能是我的项目中的某些设置不正确。
1条答案
按热度按时间zed5wv101#
我通过以下几点绕过了这个问题:
正如@Saikat所指出的,它似乎既是Spring,也是unboundo嵌入式LDAP服务器被配置为创建一个
LdapContextSource
,如果它还不存在的话……听起来嵌入式LDAP服务器赢得了这场竞赛,但却把其他所有人的事情都搞砸了。上面的代码通过强制创建/配置
LdapContextSource
来绕过这个问题,从而不让Spring或嵌入式LDAP服务器尝试创建LdapContextSource
。