Class KeyTab
A Kerberos JAAS login module that obtains long term secret keys from a
keytab file should use this class. The login module will store
an instance of this class in the private credential set of a
Subject during the commit phase of the
authentication process.
If a KeyTab object is obtained from getUnboundInstance()
or getUnboundInstance(java.io.File), it is unbound and thus can be
used by any service principal. Otherwise, if it's obtained from
getInstance(KerberosPrincipal) or
getInstance(KerberosPrincipal, java.io.File), it is bound to the
specific service principal and can only be used by it.
Please note the constructors getInstance() and
getInstance(java.io.File) were created when there was no support
for unbound keytabs. These methods should not be used anymore. An object
created with either of these methods are considered to be bound to an
unknown principal, which means, its isBound() returns true and
getPrincipal() returns null.
The keytab file format is described at http://www.ioplex.com/utilities/keytab.txt.
- Since:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionbooleanCompares the specified object with thisKeyTabfor equality.booleanexists()Checks if the keytab file exists.static KeyTabReturns the defaultKeyTabinstance that is bound to an unknown service principal.static KeyTabgetInstance(File file) Returns aKeyTabinstance from aFileobject that is bound to an unknown service principal.static KeyTabgetInstance(KerberosPrincipal princ) Returns the defaultKeyTabinstance that is bound to the specified service principal.static KeyTabgetInstance(KerberosPrincipal princ, File file) Returns aKeyTabinstance from aFileobject that is bound to the specified service principal.getKeys(KerberosPrincipal principal) Returns fresh keys for the given Kerberos principal.Returns the service principal thisKeyTabobject is bound to.static KeyTabReturns the default unboundKeyTabinstance.static KeyTabgetUnboundInstance(File file) Returns an unboundKeyTabinstance from aFileobject.inthashCode()Returns a hash code for thisKeyTab.booleanisBound()Returns if the keytab is bound to a principaltoString()Returns an informative textual representation of thisKeyTab.
-
Method Details
-
getInstance
Returns aKeyTabinstance from aFileobject that is bound to an unknown service principal.The result of this method is never null. This method only associates the returned
KeyTabobject with the file and does not read it.Developers should call
getInstance(KerberosPrincipal,File)when the bound service principal is known.- Parameters:
file- the keytabFileobject, must not be null- Returns:
- the keytab instance
- Throws:
NullPointerException- if thefileargument is null
-
getUnboundInstance
Returns an unboundKeyTabinstance from aFileobject.The result of this method is never null. This method only associates the returned
KeyTabobject with the file and does not read it.- Parameters:
file- the keytabFileobject, must not be null- Returns:
- the keytab instance
- Throws:
NullPointerException- if the file argument is null- Since:
- 1.8
-
getInstance
Returns aKeyTabinstance from aFileobject that is bound to the specified service principal.The result of this method is never null. This method only associates the returned
KeyTabobject with the file and does not read it.- Parameters:
princ- the bound service principal, must not be nullfile- the keytabFileobject, must not be null- Returns:
- the keytab instance
- Throws:
NullPointerException- if either of the arguments is null- Since:
- 1.8
-
getInstance
Returns the defaultKeyTabinstance that is bound to an unknown service principal.The result of this method is never null. This method only associates the returned
KeyTabobject with the default keytab file and does not read it.Developers should call
getInstance(KerberosPrincipal)when the bound service principal is known.- Returns:
- the default keytab instance.
-
getUnboundInstance
Returns the default unboundKeyTabinstance.The result of this method is never null. This method only associates the returned
KeyTabobject with the default keytab file and does not read it.- Returns:
- the default keytab instance
- Since:
- 1.8
-
getInstance
Returns the defaultKeyTabinstance that is bound to the specified service principal.The result of this method is never null. This method only associates the returned
KeyTabobject with the default keytab file and does not read it.- Parameters:
princ- the bound service principal, must not be null- Returns:
- the default keytab instance
- Throws:
NullPointerException- ifprincis null- Since:
- 1.8
-
getKeys
Returns fresh keys for the given Kerberos principal.Implementation of this method should make sure the returned keys match the latest content of the keytab file. The result is a newly created copy that can be modified by the caller without modifying the keytab object. The caller should
destroythe result keys after they are used.Please note that the keytab file can be created after the
KeyTabobject is instantiated and its content may change over time. Therefore, an application should call this method only when it needs to use the keys. Any previous result from an earlier invocation could potentially be expired.If there is any error (say, I/O error or format error) during the reading process of the keytab file, a saved result should be returned. If there is no saved result (say, this is the first time this method is called, or, all previous read attempts failed), an empty array should be returned. This can make sure the result is not drastically changed during the (probably slow) update of the keytab file.
Each time this method is called and the reading of the file succeeds with no exception (say, I/O error or file format error), the result should be saved for
principal. The implementation can also save keys for other principals having keys in the same keytab object if convenient.Any unsupported key read from the keytab is ignored and not included in the result.
If this keytab is bound to a specific principal, calling this method on another principal will return an empty array.
- Parameters:
principal- the Kerberos principal, must not be null.- Returns:
- the keys (never null, may be empty)
- Throws:
NullPointerException- if theprincipalargument is null
-
exists
public boolean exists()Checks if the keytab file exists. Implementation of this method should make sure that the result matches the latest status of the keytab file.- Returns:
- true if the keytab file exists; false otherwise.
-
toString
-
hashCode
-
equals
Compares the specified object with thisKeyTabfor equality. Returns true if the given object is also aKeyTaband the twoKeyTabinstances are equivalent. -
getPrincipal
Returns the service principal thisKeyTabobject is bound to. Returnsnullif it's not bound.Please note the deprecated constructors create a
KeyTabobject bound for some unknown principal. In this case, this method also returns null. User can callisBound()to verify this case.- Returns:
- the service principal
- Since:
- 1.8
-
isBound
public boolean isBound()Returns if the keytab is bound to a principal- Returns:
- if the keytab is bound to a principal
- Since:
- 1.8
-