ログから例外をキャッチできません

期限切れのパスワードでLDAPサーバーにログインしようとすると、ログに例外がスローされます。

javax.naming.AuthenticationException:[LDAP:エラーコード49 - 80090308:   LdapErr:DSID-0C0903A9、コメント:AcceptSecurityContextエラー、データ   773、v1db0

私は、ユーザーに対応するメッセージを与えたいが、私はその例外をキャッチすることはできません。 ( data 773 はパスワードが期限切れになったため、ログに表示される例外をどのように取得できますか?

                CallbackHandler handler = new UsernamePasswordHandler(
                        username, password);
                LoginContext lc = new LoginContext(applicationPolicyName,
                        handler);

                try {
                    lc.login();
                } catch (Exception){
                    log.warn(e.getMessage());
                }
0
注:ログの除外はlog.warn(e.getMessage())によってスローされません。
追加された 著者 PinkFloyd,
JNDIを使用しない多くの理由の1つは、サイズ制限が結果コードを超過した、時間制限が結果コードを超過した、他の同様の非常に基本的なLDAPトピックなどの単純なことに対処するのが奇妙で逆らって直感的で困難です。開発者は新しいコードにJNDIを使用しないことをお勧めしますが、 UnboundID LDAP SDK 。標準版は自由に使用できます。また、 LDAP:Programming Practices a>。

2 答え

例外スタックトレースを取得する必要があります。 (必要に応じて、スタックトレースをログに書き込むようにログ設定を変更します。)

それは例外がスローされている場所を教えてくれます。

次に、ソースコードを調べて、それが捕捉され、記録されている場所を見て、最初に捕まえることができるコードアップスタックがあるかどうかを確認します。

1
追加された

あなたが捕捉したいものがjavax.naming.AuthenticationException型のものであると仮定すると、それをtry catchブロックに入れることができます:

try {
  lc.login();
} catch(AuthenticationException e) {
   processError(e.getMessage());
}

...
private void processError(String errorMessage) {
  if (errorMessage.contains("data 773")) {
    //then do your stuff here like add error message as label etc
  }
}
1
追加された