1

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)”的同步丢失了,它看起来在 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().

如果我删除同步,您会在这里看到任何问题吗?

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

4

0 回答 0