private Authentication authenticateUserPassword(UsernamePasswordAuthenticationToken token) throws NamingException {
Object login = login(token);
LOGGER.debug("Starting authentication login='{}'", login);
Object password = token.getCredentials();
LdapContext ctx = createLdapCtx(login, password);
SearchControls ctrls = createSearchControls();
String filter = String.format(this.filter, login);
NamingEnumeration<SearchResult> ne = ctx.search(dn, filter, ctrls);
....
У меня есть следующий способ входа в систему. Это зависит от LDAP. Иногда он зависает в последнем ряду. Я не знаю почему. Иногда он воспроизводит тесты производительности.Установить метод тайм-аута на поиск Ldap
Есть ли способ подождать некоторое время, и если метод не ответил - верните некоторое предопределенное значение?
P.S.
private LdapContext createLdapCtx(Object login, Object password) throws NamingException {
Hashtable<String, String> props = new Hashtable<String, String>();
props.put(Context.INITIAL_CONTEXT_FACTORY, factory);
props.put(Context.PROVIDER_URL, url);
props.put(Context.SECURITY_AUTHENTICATION, "simple");
props.put(Context.SECURITY_PRINCIPAL, String.format(domain, login));
props.put(Context.SECURITY_CREDENTIALS, password.toString());
return new InitialLdapContext(props, null);
}
@RealSkeptic и Tunaki поясните разница – gstackoverflow
@gstackoverflow Это может быть не совсем правильно (я не уверен, что все жадные детали), но 'setTimeLimit' не используется для поисковых операций (и я не уверен, почему действительно) – Tunaki
NamingException - общее исключение ldap. Я не проверял, но я думаю, что TimeLimitExceededException будет выброшено – gstackoverflow