我正在尝试在应用程序启动期间在运行时更改LdapContextSource中的LDAP URL。
代码非常简单:
@Configuration
public class RepositoryConfiguration {
private final int port;
@Autowired
public RepositoryConfiguration(LdapTemplate ldapTemplate)
throws LDAPException {
this.port = 12345; // new correct port
configureLdapTemplate(ldapTemplate, port);
}
private void configureLdapTemplate(LdapTemplate ldapTemplate, int port) {
LdapContextSource ldapContextSource = (LdapContextSource) ldapTemplate.getContextSource();
ldapContextSource.setUrl("ldap://localhost:" + port);
ldapContextSource.setAnonymousReadOnly(true);
}
}
但是,当尝试对用户进行身份验证时,出现以下异常:
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]
请注意,当我不尝试以这种方式更改端口时,相同的LDAP存储库(以及我正在代码中其他地方进行身份验证的凭据)可以正常工作。
我的LDAP AuthenticationProvider使用LdapTemplate如下:
ldapTemplate.authenticate(authenticationBase, filter.encode(), password);
当然,它也被注入相同的自动连线的LdapTemplate。
我想知道我是错误地使用setContextSource
方法还是Spring不打算使用的方式。任何人都可以鸣叫吗?