Class KeyTab

java.lang.Object
javax.security.auth.kerberos.KeyTab

public final class KeyTab extends Object
该类封装了一个keytab文件。

一个从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 Details

    • getInstance

      public static KeyTab getInstance(File file)
      返回绑定到未知服务主体的File对象的KeyTab实例。

      此方法的结果永远不会为null。此方法仅将返回的KeyTab对象与文件关联,而不读取它。

      当已知绑定服务主体时,开发人员应调用getInstance(KerberosPrincipal,File)

      参数:
      file - keytab File对象,不得为null
      返回:
      keytab实例
      抛出:
      NullPointerException - 如果file参数为null
    • getUnboundInstance

      public static KeyTab getUnboundInstance(File file)
      返回从File对象获取的未绑定KeyTab实例。

      此方法的结果永远不会为null。此方法仅将返回的KeyTab对象与文件关联,而不读取它。

      参数:
      file - keytab File对象,不得为null
      返回:
      keytab实例
      抛出:
      NullPointerException - 如果文件参数为null
      自版本:
      1.8
    • getInstance

      public static KeyTab getInstance(KerberosPrincipal princ, File file)
      返回从File对象获取的绑定到指定服务主体的KeyTab实例。

      此方法的结果永远不会为null。此方法仅将返回的KeyTab对象与文件关联,而不读取它。

      参数:
      princ - 绑定的服务主体,不得为null
      file - keytab File对象,不得为null
      返回:
      keytab实例
      抛出:
      NullPointerException - 如果任一参数为null
      自版本:
      1.8
    • getInstance

      public static KeyTab getInstance()
      返回绑定到未知服务主体的默认KeyTab实例。

      此方法的结果永远不会为null。此方法仅将返回的KeyTab对象与默认keytab文件关联,而不读取它。

      当已知绑定服务主体时,开发人员应调用getInstance(KerberosPrincipal)

      返回:
      默认keytab实例。
    • getUnboundInstance

      public static KeyTab getUnboundInstance()
      返回默认的未绑定KeyTab实例。

      此方法的结果永远不会为null。此方法仅将返回的KeyTab对象与默认keytab文件关联,而不读取它。

      返回:
      默认keytab实例
      自版本:
      1.8
    • getInstance

      public static KeyTab getInstance(KerberosPrincipal princ)
      返回绑定到指定服务主体的默认KeyTab实例。

      此方法的结果永远不会为null。此方法仅将返回的KeyTab对象与默认keytab文件关联,而不读取它。

      参数:
      princ - 绑定的服务主体,不得为null
      返回:
      默认keytab实例
      抛出:
      NullPointerException - 如果princ为null
      自版本:
      1.8
    • getKeys

      public KerberosKey[] getKeys(KerberosPrincipal principal)
      为给定的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

      public String toString()
      返回此KeyTab的信息性文本表示。
      覆盖:
      toString 在类 Object
      返回:
      KeyTab的信息性文本表示。
    • hashCode

      public int hashCode()
      返回此KeyTab的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      为这个KeyTab返回一个哈希码。
      参见:
    • equals

      public boolean equals(Object other)
      将指定的对象与这个KeyTab进行比较以确定是否相等。如果给定的对象也是一个KeyTab并且两个KeyTab实例是等价的,则返回true。
      覆盖:
      equals 在类 Object
      参数:
      other - 要比较的对象
      返回:
      如果指定的对象等于这个KeyTab,则返回true
      参见:
    • getPrincipal

      public KerberosPrincipal getPrincipal()
      返回这个KeyTab对象绑定的服务主体。如果未绑定,则返回null

      请注意,已弃用的构造函数创建一个绑定到某个未知主体的KeyTab对象。在这种情况下,此方法也会返回null。用户可以调用isBound()来验证这种情况。

      返回:
      服务主体
      自:
      1.8
    • isBound

      public boolean isBound()
      返回keytab是否绑定到一个主体
      返回:
      如果keytab绑定到一个主体
      自:
      1.8