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

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

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

  1. spring:
  2. ldap:
  3. base: OU=Internals,DC=int,DC=springboot,DC=dev
  4. username: uid=admin
  5. password: secret
  6. urls: ldap://localhost:8389/
  7. embedded:
  8. base-dn: DC=springboot,DC=dev
  9. credential:
  10. username: uid=admin
  11. password: secret
  12. ldif: classpath:export2-ldap.ldif
  13. port: 8389
  14. validation:
  15. enabled: false

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

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

  1. @Configuration(proxyBeanMethods = false)
  2. @ConditionalOnClass(ContextSource.class)
  3. static class EmbeddedLdapContextConfiguration {
  4. @Bean
  5. @DependsOn("directoryServer")
  6. @ConditionalOnMissingBean
  7. LdapContextSource ldapContextSource(Environment environment, LdapProperties properties,
  8. EmbeddedLdapProperties embeddedProperties) {
  9. LdapContextSource source = new LdapContextSource();
  10. if (embeddedProperties.getCredential().isAvailable()) {
  11. source.setUserDn(embeddedProperties.getCredential().getUsername());
  12. source.setPassword(embeddedProperties.getCredential().getPassword());
  13. }
  14. source.setUrls(properties.determineUrls(environment));
  15. return source;
  16. }
  17. }

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

zed5wv10

zed5wv101#

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

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

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

相关问题