2

我正在研究检查 Kerberos KeyTab 文件是否有效的 Java 代码库,但它使用内部类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 中访问这个方法更令人烦恼,所以我正在寻找一种方法来避免使用这个内部类,但是浏览 JDK 源代码,我还没有看到任何公开该isValid()方法或等价物的东西- 内部类。

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

4

1 回答 1

2

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)

您还可以推出自己的验证器。我认为来源并不复杂。

于 2018-04-04T14:04:48.843 回答