Можно ли изменить LdapTemplate LdapContextSource во время выполнения? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь изменить 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. Кто-нибудь может вмешаться в это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...