Spring ldap аутентификация не удалась коды ошибок - PullRequest
1 голос
/ 15 декабря 2010

Я использую Spring LDAP (1.3.1) для общения с ADAM и Active Directory.

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

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 15 декабря 2010

Эта ссылка показывает, как коды ошибок ldap отображаются на исключения JNDI. Глядя на код Spring ldap, кажется, что Spring отображает каждое исключение JNDI на свое собственное исключение LDAP (LdapUtils.convertLdapException())

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

0 голосов
/ 12 ноября 2012

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

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