检查 Kerberos KeyTab 文件在 Java 中是否有效

Check whether a Kerberos KeyTab file is valid in Java

我正在开发一个 Java 代码库来检查 Kerberos KeyTab 文件是否有效,但它使用内部 class sun.security.krb5.internal.ktab.KeyTab 作为其 isValid()方法。目前,它正在执行以下操作:

File keytabFile = new File("/path/to/keytab");
KeyTab keytab = KeyTab.getInstance(keytabFile);
boolean keytabIsValid = keytab.isValid();
if (!keytabIsValid) {
   throw new ApplicationSpecificException("Keytab is not valid");
}

访问此方法在 Java 9 中比较麻烦,因此我正在寻找一种方法来避免使用此内部 class,但浏览了 JDK 源,我还没有看到任何在非内部 class.

中公开 isValid() 方法或等效方法的内容

是否有不依赖黑客的选项,例如反映私有方法或访问内部 API?

1)

您可以尝试使用本机可执行文件来验证 keytab 文件,并根据输出继续确定有效性,通过 java ProcessBuilder。例如对于 linux/*nix,您可以 运行

klist -k –t your.keytab

2)

既然你已经提到了排除访问内部 API 的愿望,我假设你知道这些选项。但仅在此处包括此特定案例的信息:

javac --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED your-class.java
java --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED your-class

3)

您也可以推出自己的验证器。我认为 source 没那么复杂。