“无法获取KeyTabKeytab的实例已损坏”

时间:2013-09-18 18:00:11

标签: java synchronization

使用JDK 1.6或JDK 1.5,我们遇到了“无法获取KeyTabKeytab实例已损坏”的问题。

观察到JDK 1.6或1.5中出现此问题的原因是,为keytab文件创建实例的方法sun.security.krb5.internal.ktab.KeyTab.getInstance(java.lang.String s)无法正确加载keytab文件,原因是此方法是不同步。

这个问题发生在我们的环境下,100个用户负载测试一致,我查看了SUN代码,发现方法“sun.security.krb5.internal.ktab.KeyTab.getInstance(java.lang.String s)”的同步丢失了,它看起来是通过制作在JDK 1.7中修复的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()包围的代码段中删除同步块。

如果删除同步,您是否在此处看到任何问题?

您之前是否遇到过此问题以及相同的解决方案?

0 个答案:

没有答案