Я пытаюсь изменить URL-адрес LDAP в LdapContextSource во время выполнения во время запуска моего приложения.
Код довольно прост:
@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);
И, конечно, он также вводится тем же Autodired LdapTemplate.
Мне интересно, если я использую метод setContextSource
неправильно или способом, не предназначенным для Spring. Кто-нибудь может вмешаться в это?