|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
org.ietf.jgss
类 GSSManager
java.lang.Object org.ietf.jgss.GSSManager
-
public abstract class GSSManager
- extends Object
此类作为其他重要 GSS-API 类的工厂,并且还提供有关受支持的机制的信息。它可以创建实现以下三个 GSS-API 接口的类的实例:GSSName
、GSSCredential
和 GSSContext
。它还具有一些查询可用的机制列表和每个机制支持的名称类型的方法。
默认的 GSSManager
子类的实例可以通过静态方法 getInstance
获取,但应用程序可以随意实例化 GSSManager
的其他字类。除其他机制外,默认的 GSSManager
实例还支持 Kerberos v5 GSS-API 机制。此机制由 Oid "1.2.840.113554.1.2.2" 标识,并在 RFC 1964 中定义。
扩展 GSSManager
抽象类的子类可以实现为基于模块化的提供程序层,该层可利用一些人们熟知的服务提供程序规范。GSSManager
API 允许应用程序设置此类实现的首选的提供程序。这些方法还允许实现抛出经过定义明确的异常,以防基于提供程序的配置不受支持。那些希望移植的应用程序必须意识到这一点,并能够通过捕获异常进行彻底恢复。
预计将有三种使用提供程序的最常见方法:
- 应用程序并不关心使用什么提供程序(默认情况下)。
- 应用程序希望优先使用特定的提供程序,或者针对特定的机制,或者始终如此,与机制无关。
- 应用程序希望尽可能使用本地配置的提供程序,但是,如果失去了对一个或多个机制的支持,则应用程序就会回调它自己的提供程序。
GSSManager
类有两种支持这些使用模式的方法:addProviderAtFront
和 addProviderAtEnd
。这两种方法可以创建 <provider, oid> 对的有序列表,其中的每个对都指示指定 oid 的一个首选提供程序。
需要注意的一点是,在由 GSSManager 创建的不同的 GSS-API 对象之间存在着一定的交互,其中,用于特定机制的提供程序可能需要对所有的对象保持一致。例如,如果 GSSCredential 包含来自机制 m 的提供程序 p 中的元素,则通常要将它传递给一个将使用机制 m 的提供程序 p 的 GSSContext。实现最大可移植性的简单经验就是,不要混合从不同的 GSSManager 中创建的对象,如果应用程序想在已经创建了对象的 GSSManager 上调用 addProviderAtFront
方法,在可能的情况下,则必须创建不同的 GSSManager 实例。
下面是一些示例代码,它显示了如何使用 GSSManager:
GSSManager manager = GSSManager.getInstance(); Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2"); Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1"); // Identify who the client wishes to be GSSName userName = manager.createName("duke", GSSName.NT_USER_NAME); // Identify the name of the server. This uses a Kerberos specific // name format. GSSName serverName = manager.createName("nfs/foo.sun.com", krb5PrincipalNameType); // Acquire credentials for the user GSSCredential userCreds = manager.createCredential(userName, GSSCredential.DEFAULT_LIFETIME, krb5Mechanism, GSSCredential.INITIATE_ONLY); // Instantiate and initialize a security context that will be // established with the server GSSContext context = manager.createContext(serverName, krb5Mechanism, userCreds, GSSContext.DEFAULT_LIFETIME);
服务器端可能会使用此源的以下变量:
// Acquire credentials for the server GSSCredential serverCreds = manager.createCredential(serverName, GSSCredential.DEFAULT_LIFETIME, krb5Mechanism, GSSCredential.ACCEPT_ONLY); // Instantiate and initialize a security context that will // wait for an establishment request token from the client GSSContext context = manager.createContext(serverCreds);
- 从以下版本开始:
- 1.4
- 另请参见:
GSSName
,GSSCredential
,GSSContext
构造方法摘要 | |
---|---|
GSSManager() |
方法摘要 | |
---|---|
abstract void |
addProviderAtEnd(Provider p, Oid mech) 此方法用于向 GSSManager 指示,如果没有其他的提供程序支持指定的机制,则应用程序将使用特定的提供程序。 |
abstract void |
addProviderAtFront(Provider p, Oid mech) 此方法用来向 GSSManager 表示,当支持是指定的机制所需要的支持时,应用程序希望优先于其他所有提供程序使用特定的提供程序。 |
abstract GSSContext |
createContext(byte[] interProcessToken) 创建以前导出的上下文的 Factory 方法。 |
abstract GSSContext |
createContext(GSSCredential myCred) 为接受端一方创建上下文的 Factory 方法。 |
abstract GSSContext |
createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) 在初始端一方创建上下文的 Factory 方法。 |
abstract GSSCredential |
createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) 通过一套机制获取凭据的 Factory 方法。 |
abstract GSSCredential |
createCredential(GSSName name, int lifetime, Oid mech, int usage) 获取单个机制凭据的 Factory 方法。 |
abstract GSSCredential |
createCredential(int usage) 获取默认凭据的 Factory 方法。 |
abstract GSSName |
createName(byte[] name, Oid nameType) 将包含名称的字节数组从指定的名称空间转换到 GSSName 对象的 Factory 方法。 |
abstract GSSName |
createName(byte[] name, Oid nameType, Oid mech) 将包含名称的字符串数组从指定的名称空间转换到 GSSName 对象并同时针对机制对其进行规范化的 Factory 方法。 |
abstract GSSName |
createName(String nameStr, Oid nameType) 将字符串名称从指定的名称空间转换到 GSSName 对象的 Factory 方法。 |
abstract GSSName |
createName(String nameStr, Oid nameType, Oid mech) 将字符串名称从指定的名称空间转换到 GSSName 对象并同时针对机制对其进行规范化的 Factory 方法。 |
static GSSManager |
getInstance() 返回默认的 GSSManager 实现。 |
abstract Oid[] |
getMechs() 返回一个可通过此 GSSManager 提供给 GSS-API 调用方的机制列表。 |
abstract Oid[] |
getMechsForName(Oid nameType) 返回支持指定的名称类型的机制的列表。 |
abstract Oid[] |
getNamesForMech(Oid mech) 然后返回由指定的机制所支持的名称类型。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
GSSManager
public GSSManager()
方法详细信息 |
---|
getInstance
public static GSSManager getInstance()
- 返回默认的 GSSManager 实现。
-
- 返回:
- GSSManager 实现
getMechs
public abstract Oid[] getMechs()
-
返回一个可通过此 GSSManager 提供给 GSS-API 调用方的机制列表。从
getInstance()
方法中获取的默认 GSSManager 将 Oid "1.2.840.113554.1.2.2" 放在了其列表中。此 Oid 可确定已在 RFC 1964 中定义的 Kerberos v5 GSS-API 机制。 -
- 返回:
-
一些与可用的机制对应的 Oid 对象。当没有机制可用时(例如正在动态配置机制,并且当前未设置任何机制),将返回
null
值
getNamesForMech
public abstract Oid[] getNamesForMech(Oid mech) throws GSSException
-
然后返回由指定的机制所支持的名称类型。
默认的 GSSManager 实例包括对 Kerberos v5 机制的支持。当指定此机制 ("1.2.840.113554.1.2.2") 时,返回的列表至少将包括以下名称类型:
GSSName.NT_HOSTBASED_SERVICE
、GSSName.NT_EXPORT_NAME
和特定于 Kerberos v5 的 Oid "1.2.840.113554.1.2.2.1"。Oid "1.2.840.113554.1.2.2.1" 的名称空间在 RFC 1964 中进行了定义。 -
- 参数:
mech
- 将查询的机制 Oid- 返回:
- 一些与该机制支持的名称类型对应的 Oid 对象。
- 抛出:
GSSException,包含以下主要错误代码:{@link
- GSSException#UNAVAILABLE GSSException.UNAVAILABLE}、GSSException.FAILURE
GSSException
- 另请参见:
getMechsForName(Oid)
getMechsForName
public abstract Oid[] getMechsForName(Oid nameType)
-
返回支持指定的名称类型的机制的列表。
当指定的名称类型是
GSSName.NT_HOSTBASED_SERVICE
、GSSName.NT_EXPORT_NAME
或 "1.2.840.113554.1.2.2.1" 这三者之一时,在此列表中将始终返回 Kerberos v5 机制 ("1.2.840.113554.1.2.2")。 -
- 参数:
nameType
- 要查找的名称类型的 Oid- 返回:
-
一些与支持指定的名称类型的机制对应的 Oid 对象。当没有机制支持指定的名称类型时,将返回
null
。 - 另请参见:
getNamesForMech(Oid)
createName
public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException
-
将字符串名称从指定的名称空间转换到 GSSName 对象的 Factory 方法。通常,创建的
GSSName
对象包括该名称的多种表示形式,每个受支持的机制都有一种表示形式;此种情况的两个例外示例是:名称空间类型参数指示为 NT_EXPORT_NAME 或 GSS-API 实现不是多机制。建议不要将此方法用于 NT_EXPORT_NAME 类型,因为将以前导出的名称(由任意字节构成)表示为 String 可能会导致字符编码方案问题。在此情形下,建议将字节直接传入createName
这一方法的重载形式。 -
- 参数:
nameStr
- 表示要创建的名称的可打印形式的字符串。nameType
- 指定所提供的可打印名称的名称空间的 Oid。null
可以用来指定,特定于机制的默认可打印语法应该根据每个检查 nameStr 的机制进行假定。建议不要将名称类型 NT_EXPORT_NAME 用于此方法。- 返回:
- 一个表示所指定主体的 GSSName
- 抛出:
GSSException,包含以下主要错误代码:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
- 另请参见:
GSSName
,GSSName.NT_EXPORT_NAME
createName
public abstract GSSName createName(byte[] name, Oid nameType) throws GSSException
-
将包含名称的字节数组从指定的名称空间转换到 GSSName 对象的 Factory 方法。通常,创建的
GSSName
对象包括该名称的多种表示形式,每个受支持的机制都有一种表示形式;此种情况的两个例外示例是:名称空间类型参数指示为 NT_EXPORT_NAME 或 GSS-API 实现不是多机制。传入的字节将由每种基础机制根据它所选择的编码方案针对指定的命名类型进行解释。 -
- 参数:
name
- 包含要创建的名称的字节数组nameType
- 指定在字节数组中提供的名称的名称空间的 Oid。null
可用来指定,特定于机制的默认可打印语法应该根据每个检查字节数组的机制进行假定。- 返回:
- 一个表示所指定主体的 GSSName
- 抛出:
GSSException,包含以下主要错误代码:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
- 另请参见:
GSSName
,GSSName.NT_EXPORT_NAME
createName
public abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException
-
将字符串名称从指定的名称空间转换到 GSSName 对象并同时针对机制对其进行规范化的 Factory 方法。换句话说,此方法是一种实用程序,它执行以下两个步骤的等效步骤:首先是
createName
,然后是GSSName.canonicalize
。 -
- 参数:
nameStr
- 表示要创建的名称的可打印形式的字符串。nameType
- 指定所提供的可打印名称的名称空间的 Oid。null
可以用来指定,特定于机制的默认可打印语法应该根据每个检查 nameStr 的机制进行假定。建议不要将名称类型 NT_EXPORT_NAME 用于此方法。mech
- 指定应该为其规范化名称的机制的 Oid- 返回:
- 一个表示指定的主体的 GSSName
- 抛出:
GSSException,包含以下主要错误代码:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
- 另请参见:
GSSName.canonicalize(Oid)
,GSSName.NT_EXPORT_NAME