2010-12-14 4 views
0

Я использую Spring LDAP (1.3.1) для общения с ADAM и Active Directory.Ошибка аутентификации ldap Spring

При попытке аутентификации кого-то с помощью ldapTemplate.authenticate(), я получаю обратно ошибки с помощью обратного вызова ошибки, но это дает очень общее AuthenticationException исключения, и я не могу извлечь то, что именно проблема:

  • счета инвалиды
  • пароль истек
  • должен изменить пароль при следующем входе
  • счетов истекли
  • и т.д.

Все, что я получаю, это detailMessage, которое я предполагаю, это то, что отправляет AD. Что-то вроде:

org.springframework.ldap.AuthenticationException: Код ошибки 49 - 8009030C:: [LDAP LdapErr: DSID-0C0903A9, комментарий: AcceptSecurityContext ошибка, данные 773, v1db0

Я вижу данные 773, что означает, что пользователь должен изменить пароль при следующем входе в систему. Я не хочу анализировать это вручную. Есть ли какие-либо «адаптеры», о которых я не знаю?

У кого-нибудь была эта проблема?

Большое спасибо!

ответ

2

This link перечисляет, как коды ошибок ldap сопоставляются с исключениями JNDI. Рассматривая весенний код ldap, кажется, что весна отображает каждое исключение JNDI в свое пользовательское исключение LDAP (LdapUtils.convertLdapException())

Теперь 773 выглядит точным для Active Directory. Следовательно, это необходимо обрабатывать пользователем явно, если это необходимо. This link содержит список ошибок Active Directory. Spring ldap предоставит этот текст в деталях ошибки, в результате чего пользователь будет использовать их в качестве подходящих.

0

Если ваш код заканчивается в PasswordPolicyAwareContextSource.getContext или в аналогичном весеннем коде Spring не очень хорошо обрабатывает его (ошибка).
Когда срок действия учетной записи истек, генерируется исключение. вышеприведенный класс получает это исключение , а затем, и это ключ, он вызывает
PasswordPolicyResponseControl ctrl = PasswordPolicyControlExtractor.extractControl (ctx);
Spring затем вызывает ctrl.isLocked(), но не может проверить какие-либо другие условия. Вы должны переопределить код Spring, и вы можете проверить ctrl.isExpired(), ctrl.isChangeAfterReset(), и там есть куча других информационных геттеров

Смежные вопросы