1

Spring LDAP(1.3.1)を使用してADAMおよびActiveDirectoryと通信しています。

ldapTemplate.authenticate()を使用して誰かを認証しようとすると、エラーコールバックを介してエラーが返されますが、非常に一般的な例外AuthenticationExceptionが発生し、問題を正確に抽出できません。

  • アカウントが無効になっています
  • パスワードの有効期限が切れました
  • 次回のログイン時にパスワードを変更する必要があります
  • アカウントの有効期限が切れました

私が返すのは、ADが送り返すものであると私が想定するdetailMessageだけです。何かのようなもの:

org.springframework.ldap.AuthenticationException:[LDAP:エラーコード49-8009030C:LdapErr:DSID-0C0903A9、コメント:AcceptSecurityContextエラー、データ773、v1db0

データが表示773されます。つまり、ユーザーは次回のログイン時にパスワードを変更する必要があります。これを手動で解析したくありません。私が知らない「アダプター」はありますか?

誰かがこの問題を抱えたことはありますか?

どうもありがとう!

4

2 に答える 2

4

このリンクは、LDAPエラーコードがJNDI例外にどのようにマップされるかを示しています。spring ldapコードを見ると、springは各JNDI例外をカスタムLDAP例外にマップしているようです(LdapUtils.convertLdapException()

さて、773ActiveDirectoryに固有のようです。したがって、必要に応じて、これをユーザーが明示的に処理する必要があります。 このリンクには、一連のActiveDirectoryエラーが一覧表示されます。Spring ldapは、エラーの詳細にこのテキストを提供し、ユーザーがそれらを適切に使用できるようにします。

于 2010-12-15T05:38:48.000 に答える
0

コードがPasswordPolicyAwareContextSource.getContextまたは同様のSpringコードで終わる場合、Springはそれをうまく処理しません(バグ)。
アカウントの有効期限が切れると、例外がスローされます。上記のクラスはこの例外をキャッチし、これがキーであり、
PasswordPolicyResponseControl ctrl = PasswordPolicyControlExtractor.extractControl(ctx);を呼び出します。
次に、Springはctrl.isLocked()を呼び出しますが、他の条件のチェックに失敗します。Springのコードをオーバーライドする必要があります。ctrl.isExpired()、ctrl.isChangeAfterReset()を確認できます。その時点で、他の多くの情報ゲッターが利用可能です。

于 2012-11-12T09:01:21.610 に答える