JDK 1.6 または JDK 1.5 で「KeyTabKeytab のインスタンスを取得できませんでした」という問題が発生しています。
JDK 1.6 または 1.5 でのこの問題の原因はsun.security.krb5.internal.ktab.KeyTab.getInstance(java.lang.String s)
、keytab ファイルのインスタンスを作成するメソッドが、このメソッドが同期されていないために、keytab ファイルを適切にロードできなかったためです。
この問題は、私たちの環境で 100 ユーザーの負荷テストを一貫して行ったときに発生していました。SUN コードを調べたところ、メソッド " sun.security.krb5.internal.ktab.KeyTab.getInstance(java.lang.String s)
" の同期が欠落していることがKeyTab.getInstance(java.lang.String s)
わかりました。. したがって、上記の問題を回避するために、以下に示すようにコードに同期を追加しました。Sun ライブラリが各ログイン コンテキストの keyTab をロードする方法がわからないためです。
LoginContext loginContext = new LoginContext(contextName);
synchronized(KerberosUtility.class)
{
loginContext.login();
}
メソッド " sun.security.krb5.internal.ktab.KeyTab.getInstance(java.lang.String s)
" は JDK 1.7 で同期されるため、上記のコード スニペットの で囲まれている同期ブロックを削除する予定ですloginContext.login()
。
同期を削除すると、何か問題が発生しますか?
以前にこの問題とその解決策に遭遇しましたか?