一个从keytab文件获取长期密钥的Kerberos JAAS登录模块应该使用这个类。在认证过程的提交阶段,登录模块将在Subject
的私有凭证集中存储这个类的实例。
如果从getUnboundInstance()
或getUnboundInstance(java.io.File)
获取了一个KeyTab
对象,它是未绑定的,因此可以被任何服务主体使用。否则,如果从getInstance(KerberosPrincipal)
或getInstance(KerberosPrincipal, java.io.File)
获取,它将绑定到特定的服务主体,并且只能被它使用。
请注意,当没有支持未绑定keytab时,构造函数getInstance()
和getInstance(java.io.File)
被创建。这些方法不应再被使用。使用这些方法创建的对象被视为绑定到未知主体,这意味着它的isBound()
返回true,getPrincipal()
返回null。
如果应用程序需要从Subject
访问KeyTab
实例,则可能需要被授予PrivateCredentialPermission
。当应用程序依赖于默认的JGSS Kerberos机制访问KeyTab
时,不需要此权限。在这种情况下,应用程序将需要适当的ServicePermission
。
keytab文件格式在 http://www.ioplex.com/utilities/keytab.txt中描述。
- 自版本:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionboolean
将指定的对象与此KeyTab
进行比较,以确定它们是否相等。boolean
exists()
检查keytab文件是否存在。static KeyTab
返回绑定到未知服务主体的默认KeyTab
实例。static KeyTab
getInstance
(File file) 返回绑定到未知服务主体的File
对象的KeyTab
实例。static KeyTab
getInstance
(KerberosPrincipal princ) 返回绑定到指定服务主体的默认KeyTab
实例。static KeyTab
getInstance
(KerberosPrincipal princ, File file) 返回绑定到指定服务主体的File
对象的KeyTab
实例。getKeys
(KerberosPrincipal principal) 为给定的Kerberos主体返回新的密钥。返回此KeyTab
对象绑定到的服务主体。static KeyTab
返回默认的未绑定KeyTab
实例。static KeyTab
getUnboundInstance
(File file) 返回从File
对象获取的未绑定KeyTab
实例。int
hashCode()
返回此KeyTab
的哈希码。boolean
isBound()
返回keytab是否绑定到主体。toString()
返回此KeyTab
的信息性文本表示。
-
Method Details
-
getInstance
返回绑定到未知服务主体的File
对象的KeyTab
实例。此方法的结果永远不会为null。此方法仅将返回的
KeyTab
对象与文件关联,而不读取它。当已知绑定服务主体时,开发人员应调用
getInstance(KerberosPrincipal,File)
。- 参数:
-
file
- keytabFile
对象,不得为null - 返回:
- keytab实例
- 抛出:
-
NullPointerException
- 如果file
参数为null
-
getUnboundInstance
返回从File
对象获取的未绑定KeyTab
实例。此方法的结果永远不会为null。此方法仅将返回的
KeyTab
对象与文件关联,而不读取它。- 参数:
-
file
- keytabFile
对象,不得为null - 返回:
- keytab实例
- 抛出:
-
NullPointerException
- 如果文件参数为null - 自版本:
- 1.8
-
getInstance
返回从File
对象获取的绑定到指定服务主体的KeyTab
实例。此方法的结果永远不会为null。此方法仅将返回的
KeyTab
对象与文件关联,而不读取它。- 参数:
-
princ
- 绑定的服务主体,不得为null -
file
- keytabFile
对象,不得为null - 返回:
- keytab实例
- 抛出:
-
NullPointerException
- 如果任一参数为null - 自版本:
- 1.8
-
getInstance
返回绑定到未知服务主体的默认KeyTab
实例。此方法的结果永远不会为null。此方法仅将返回的
KeyTab
对象与默认keytab文件关联,而不读取它。当已知绑定服务主体时,开发人员应调用
getInstance(KerberosPrincipal)
。- 返回:
- 默认keytab实例。
-
getUnboundInstance
返回默认的未绑定KeyTab
实例。此方法的结果永远不会为null。此方法仅将返回的
KeyTab
对象与默认keytab文件关联,而不读取它。- 返回:
- 默认keytab实例
- 自版本:
- 1.8
-
getInstance
返回绑定到指定服务主体的默认KeyTab
实例。此方法的结果永远不会为null。此方法仅将返回的
KeyTab
对象与默认keytab文件关联,而不读取它。- 参数:
-
princ
- 绑定的服务主体,不得为null - 返回:
- 默认keytab实例
- 抛出:
-
NullPointerException
- 如果princ
为null - 自版本:
- 1.8
-
getKeys
为给定的Kerberos主体返回新的密钥。此方法的实现应确保返回的密钥与keytab文件的最新内容匹配。结果是一个新创建的副本,可以由调用者修改而不修改keytab对象。调用者在使用完密钥后应该销毁结果密钥。
请注意,keytab文件可以在实例化
KeyTab
对象后创建,并且其内容可能随时间而变化。因此,应用程序只在需要使用密钥时才调用此方法。任何先前调用的结果可能会过期。如果在读取keytab文件的过程中出现任何错误(例如I/O错误或格式错误),应返回保存的结果。如果没有保存的结果(例如,这是第一次调用此方法,或者所有先前的读取尝试失败),则应返回一个空数组。这可以确保结果在keytab文件的(可能很慢的)更新期间不会发生 drastical 变化。
每次调用此方法并且文件读取成功且没有异常(例如I/O错误或文件格式错误)时,应为
principal
保存结果。实现还可以为其他在同一keytab对象中具有密钥的主体保存密钥,如果方便的话。从keytab中读取的任何不受支持的密钥将被忽略并不包含在结果中。
如果此keytab绑定到特定主体,则在另一个主体上调用此方法将返回一个空数组。
- 参数:
-
principal
- Kerberos主体,不得为null。 - 返回:
- 密钥(永不为null,可能为空)
- 抛出:
-
NullPointerException
- 如果principal
参数为null -
SecurityException
- 如果存在安全管理器且不允许对keytab文件的读取访问
-
exists
public boolean exists()检查keytab文件是否存在。此方法的实现应确保结果与keytab文件的最新状态匹配。- 返回:
- 如果keytab文件存在,则为true;否则为false。
- 抛出:
-
SecurityException
- 如果存在安全管理器且不允许对keytab文件的读取访问
-
toString
返回此KeyTab
的信息性文本表示。 -
hashCode
public int hashCode()返回此KeyTab
的哈希码。 -
equals
将指定的对象与这个KeyTab
进行比较以确定是否相等。如果给定的对象也是一个KeyTab
并且两个KeyTab
实例是等价的,则返回true。 -
getPrincipal
返回这个KeyTab
对象绑定的服务主体。如果未绑定,则返回null
。请注意,已弃用的构造函数创建一个绑定到某个未知主体的
KeyTab
对象。在这种情况下,此方法也会返回null。用户可以调用isBound()
来验证这种情况。- 返回:
- 服务主体
- 自:
- 1.8
-
isBound
public boolean isBound()返回keytab是否绑定到一个主体- 返回:
- 如果keytab绑定到一个主体
- 自:
- 1.8
-