createName
方法之一来获取此接口的实现。在概念上,GSSName包含实体的许多表示或许多原始名称元素,每个支持的底层机制一个。在GSS术语中,包含来自一个机制的元素的GSSName称为机制名称(MN)。
由于不同的身份验证机制可能使用不同的命名空间来标识其主体,GSS-API的命名支持在多机制环境中(甚至在一些支持多个命名空间的单一机制环境中)必然是复杂的。不同的名称格式及其定义通过Oid
进行标识,并且在此接口中定义了一些标准类型。名称的格式可以根据其名称类型的唯一Oid
派生。
以下包含了使用GSSName
接口的代码示例。下面的代码创建一个GSSName
,将其转换为MN,执行比较,获取名称的可打印表示,将其导出为字节数组,然后重新导入以获取新的GSSName
。
GSSManager manager = GSSManager.getInstance(); // create a host based service name GSSName name = manager.createName("service@host", GSSName.NT_HOSTBASED_SERVICE); Oid krb5 = new Oid("1.2.840.113554.1.2.2"); GSSName mechName = name.canonicalize(krb5); // the above two steps are equivalent to the following GSSName mechName = manager.createName("service@host", GSSName.NT_HOSTBASED_SERVICE, krb5); // perform name comparison if (name.equals(mechName)) print("Names are equals."); // obtain textual representation of name and its printable // name type print(mechName.toString() + mechName.getStringNameType().toString()); // export and re-import the name byte [] exportName = mechName.export(); // create a new name object from the exported buffer GSSName newName = manager.createName(exportName, GSSName.NT_EXPORT_NAME);如果安装了安全管理器,则为了创建包含Kerberos名称元素但未提供其领域的
GSSName
,必须授予ServicePermission
,并且权限的服务主体必须至少在Kerberos名称元素的领域内。例如,如果createName("user", NT_USER_NAME)
的结果包含Kerberos名称元素user@EXAMPLE.COM
,则必须授予具有服务主体host/www.example.com@EXAMPLE.COM
(以及任何操作)的ServicePermission
。否则,创建将抛出包含GSSException.FAILURE
错误代码的GSSException
。
- 自从:
- 1.4
- 参见:
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptioncanonicalize
(Oid mech) 为某个机制创建一个经过规范化的名称。boolean
将此GSSName
对象与可能是GSSName
的另一个对象进行比较。boolean
比较两个GSSName
对象,以确定它们是否引用相同的实体。byte[]
export()
返回机制名称(MN)的规范连续字节表示,适合由授权函数进行直接逐字节比较。返回可从toString
方法获取的名称的可打印表示的名称类型。int
hashCode()
返回此GSSName的哈希码值。boolean
测试此名称对象是否表示匿名实体。boolean
isMN()
测试此名称对象是否表示机制名称(MN)。toString()
返回GSSName
对象的文本表示。
-
Field Details
-
NT_HOSTBASED_SERVICE
表示基于主机的服务名称形式的Oid。用于表示与主机计算机关联的服务。此名称形式使用两个元素“service”和“hostname”构造,如下:service@hostname。它表示以下Oid值:
{ iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) service_name(4) }
-
NT_USER_NAME
用于指示本地系统上命名用户的名称类型。它表示以下Oid值:
{ iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) user_name(1) }
-
NT_MACHINE_UID_NAME
用于指示对应于本地系统上用户的数字用户标识符的名称类型(例如Uid)。它表示以下Oid值:
{ iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) machine_uid_name(2) }
-
NT_STRING_UID_NAME
用于指示表示本地系统上用户的数字用户标识符的数字字符串的名称类型。它表示以下Oid值:
{ iso(1) member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) generic(1) string_uid_name(3) }
-
NT_ANONYMOUS
用于表示匿名实体的名称类型。它表示以下Oid值:
{ 1(iso), 3(org), 6(dod), 1(internet), 5(security), 6(nametypes), 3(gss-anonymous-name) }
-
NT_EXPORT_NAME
用于指示由导出方法生成的导出名称的名称类型。它表示以下Oid值:
{ 1(iso), 3(org), 6(dod), 1(internet), 5(security), 6(nametypes), 4(gss-api-exported-name) }
-
-
Method Details
-
equals
比较两个GSSName
对象,以确定它们是否引用相同的实体。- 参数:
-
another
- 要与此名称进行比较的GSSName
- 返回:
- 如果两个名称至少包含一个共同的原始元素,则返回true。如果任何一个名称表示匿名实体,则该方法将返回false。
- 抛出:
-
GSSException
- 当无法比较名称时,包含以下主要错误代码:GSSException.BAD_NAMETYPE
,GSSException.FAILURE
-
equals
-
hashCode
int hashCode()返回此GSSName的哈希码值。 -
canonicalize
创建一个为某个机制规范化的名称。- 参数:
-
mech
- 请求名称的规范化形式的机制的oid。 - 返回:
-
包含表示所需机制的名称的规范化形式的一个原始元素的
GSSName
。 - 抛出:
-
GSSException
- 包含以下主要错误代码:GSSException.BAD_MECH
,GSSException.BAD_NAMETYPE
,GSSException.BAD_NAME
,GSSException.FAILURE
-
export
返回机制名称(MN)的规范连续字节表示,适合授权函数直接进行逐字节比较。如果名称不是MN,则实现可能会抛出带有NAME_NOT_MN状态代码的GSSException。如果实现选择不抛出异常,则应使用一些特定于系统的默认机制来规范化名称,然后导出它。从结构上看,导出的名称对象包括一个包含标识验证名称的机制的OID的标头,以及包含名称本身的尾部,其中尾部的语法由各个机制规范定义。输出缓冲区的标头格式在RFC 2743中指定。导出的名称在大型访问控制列表中非常有用,其中在ACL中为每个名称创建一个GSSName对象的开销以及对ACL中每个名称调用equals方法的开销可能是禁止的。
可以通过使用字节数组工厂方法
GSSManager.createName
并指定NT_EXPORT_NAME作为名称类型对象标识符来重新导入导出的名称。结果的GSSName
名称也将是MN。- 返回:
- 包含导出名称的byte[]。RFC 2743为这些字节定义了“机制独立导出名称对象格式”。
- 抛出:
-
GSSException
- 包含以下主要错误代码:GSSException.BAD_NAME
,GSSException.BAD_NAMETYPE
,GSSException.FAILURE
-
toString
String toString()返回GSSName
对象的文本表示。要检索打印名称格式,确定返回字符串的语法,请使用getStringNameType
方法。 -
getStringNameType
返回可从toString
方法获得的此名称的可打印表示的名称类型。- 返回:
- 代表从toString方法返回的名称的命名空间的Oid。
- 抛出:
-
GSSException
- 包含以下主要错误代码:GSSException.FAILURE
-
isAnonymous
boolean isAnonymous()测试此名称对象是否表示匿名实体。- 返回:
- 如果这是匿名名称,则为true,否则为false。
-
isMN
boolean isMN()测试此名称对象是否表示机制名称(MN)。MN是包含恰好一个机制的原始名称元素的GSSName。- 返回:
- 如果这是MN,则为true,否则为false。
-