JavaTM Platform
Standard Ed. 6

javax.security.auth.x500
类 X500Principal

java.lang.Object
  继承者 javax.security.auth.x500.X500Principal
所有已实现的接口:
Serializable, Principal

public final class X500Principal
extends Object
implements Principal, Serializable

此类表示一个 X.500 PrincipalX500Principal 由标识名(例如,"CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US")表示。

可以通过使用标识名的字符串表示形式或通过使用标识名的 ASN.1 DER 编码的字节表示形式对此类进行实例化。RFC 2253 中定义了标识名的字符串表示形式的当前规范。但是此类接受 RFC 2253 和 RFC 1779 的字符串格式,也识别属性类别关键字,该关键字的 OID(对象标识符)是在 RFC 2459 中定义的。

X500Principal 的字符串表示形式可以通过调用 getName 方法获得。

注意,X509CertificategetSubjectX500PrincipalgetIssuerX500Principal 方法返回表示证书的发行者和主体字段的 X500Principals。

从以下版本开始:
1.4
另请参见:
X509Certificate, 序列化表格

字段摘要
static String CANONICAL
          标识名的规范化字符串格式。
static String RFC1779
          标识名的 RFC 1779 字符串格式。
static String RFC2253
          标识名的 RFC 2253 字符串格式。
 
构造方法摘要
X500Principal(byte[] name)
          根据 ASN.1 DER 编码格式的标识名创建 X500Principal
X500Principal(InputStream is)
          根据包含 ASN.1 DER 编码格式的标识名的 InputStream 创建 X500Principal
X500Principal(String name)
          根据 X.500 标识名(例:"CN=Duke、 OU=JavaSoft、 O=Sun Microsystems、 C=US")的字符串表示形式创建 X500Principal
X500Principal(String name, Map<String,String> keywordMap)
          根据 X.500 标识名(例:“CN=Duke、OU=JavaSoft、O=Sun Microsystems、C=US”)的字符串表示形式创建 X500Principal
 
方法摘要
 boolean equals(Object o)
          比较指定的 Object 与此 X500Principal 的相等性。
 byte[] getEncoded()
          返回 ASN.1 DER 编码形式的标识名。
 String getName()
          返回使用 RFC 2253 中所定义格式的 X.500 标识名的字符串表示形式。
 String getName(String format)
          返回使用指定格式的 X.500 标识名的字符串表示形式。
 String getName(String format, Map<String,String> oidMap)
          返回使用指定格式的 X.500 标识名的字符串表示形式。
 int hashCode()
          返回此 X500Principal 的哈希码。
 String toString()
          返回此 X500Principal 的用户友好的字符串表示形式。
 
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

字段详细信息

RFC1779

public static final String RFC1779
标识名的 RFC 1779 字符串格式。

另请参见:
常量字段值

RFC2253

public static final String RFC2253
标识名的 RFC 2253 字符串格式。

另请参见:
常量字段值

CANONICAL

public static final String CANONICAL
标识名的规范化字符串格式。

另请参见:
常量字段值
构造方法详细信息

X500Principal

public X500Principal(String name)
根据 X.500 标识名(例:"CN=Duke、 OU=JavaSoft、 O=Sun Microsystems、 C=US")的字符串表示形式创建 X500Principal。 标识名必须使用 RFC 1779 或 RFC 2253(任何一种格式都是可接受的)中定义的语法指定。

此构造方法识别在 RFC 1779 和 RFC 2253(列出在 getName(String format) 中)中定义的属性类别关键字,以及 T、DNQ 或 DNQUALIFIER、SURNAME、GIVENNAME、INITIALS、GENERATION、EMAILADDRESS 和 SERIALNUMBER 关键字(它们的 OID 定义在 RFC 2459 及其后续文档中)。其他任何属性类型都必须指定为 OID。

参数:
name - RFC 1779 或 RFC 2253 格式的 X.500 标识名
抛出:
NullPointerException - 如果 namenull
IllegalArgumentException - 如果错误地指定了 name

X500Principal

public X500Principal(String name,
                     Map<String,String> keywordMap)
根据 X.500 标识名(例:“CN=Duke、OU=JavaSoft、O=Sun Microsystems、C=US”)的字符串表示形式创建 X500Principal。 标识名必须使用 RFC 1779 或 RFC 2253(任何一种格式都是可接受的)中定义的语法指定。

此构造方法识别 X500Principal(String) 中指定的属性类型关键字,也识别在 keywordMap 参数列出的其他关键字。keywordMap 中的关键字项优先于 X500Principal(String) 所识别的默认关键字。关键字必须全部用大写指定,否则它们将被忽略。忽略错误地指定的关键字;但是,如果该名称中的关键字映射到错误地指定的 OID,则抛出 IllegalArgumentException。允许两个不同的关键字映射到同一个 OID。

参数:
name - RFC 1779 或 RFC 2253 格式的 X.500 标识名
keywordMap - 属性类型关键字映射,其中每个关键字是一个映射到 String 形式的相应对象标识符的关键字 String(由句点分隔的非负整数序列)。映射可以为空但不能为 null
抛出:
NullPointerException - 如果 namekeywordMapnull
IllegalArgumentException - 如果错误地指定了 name 或者 name 中的关键字映射到没有以正确形式存在的 OID
从以下版本开始:
1.6

X500Principal

public X500Principal(byte[] name)
根据 ASN.1 DER 编码格式的标识名创建 X500Principal。此结构的 ASN.1 表示如下所示。

 Name ::= CHOICE {
   RDNSequence }

 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

 RelativeDistinguishedName ::=
   SET SIZE (1 .. MAX) OF AttributeTypeAndValue

 AttributeTypeAndValue ::= SEQUENCE {
   type     AttributeType,
   value    AttributeValue }

 AttributeType ::= OBJECT IDENTIFIER

 AttributeValue ::= ANY DEFINED BY AttributeType
 ....
 DirectoryString ::= CHOICE {
       teletexString           TeletexString (SIZE (1..MAX)),
       printableString         PrintableString (SIZE (1..MAX)),
       universalString         UniversalString (SIZE (1..MAX)),
       utf8String              UTF8String (SIZE (1.. MAX)),
       bmpString               BMPString (SIZE (1..MAX)) }
 

参数:
name - 包含 ASN.1 DER 编码格式的标识名的字节数组
抛出:
IllegalArgumentException - 如果出现编码错误(不正确的 DN 格式)

X500Principal

public X500Principal(InputStream is)
根据包含 ASN.1 DER 编码格式的标识名的 InputStream 创建 X500PrincipalX500Principal(byte[] name) 的文档中提供了此结构的 ASN.1 表示法。

输入流的读取位置位于已编码标识名后的下一个可用字节处。

参数:
is - 包含 ASN.1 DER 编码格式的标识名的 InputStream
抛出:
NullPointerException - 如果 InputStreamnull
IllegalArgumentException - 如果出现编码错误(不正确的 DN 格式)
方法详细信息

getName

public String getName()
返回使用 RFC 2253 中所定义格式的 X.500 标识名的字符串表示形式。

此方法等效于调用 getName(X500Principal.RFC2253)

指定者:
接口 Principal 中的 getName
返回:
X500Principal 的标识名

getName

public String getName(String format)
返回使用指定格式的 X.500 标识名的字符串表示形式。该格式的有效值是 "RFC1779"、"RFC2253" 和 "CANONICAL"(不区分大小写)。

如果将格式指定为 "RFC1779",则此方法指定 RFC 1779(CN、L、ST、O、OU、C 和 STREET)中定义的属性类型关键字。其他任何属性类型都被指定为 OID。

如果将格式指定为 "RFC2253",则此方法指定 RFC 2253(CN、L、ST、O、OU、C、STREET、DC 和 UID)中定义的属性类型关键字。其他任何属性类型都被指定为 OID。在进行严格的读取时,RFC 2253 只指定 UTF-8 字符串表示形式。此方法返回的 String 是通过解码此 UTF-8 表示形式得到的 Unicode 字符串。

如果将格式指定为 "CANONICAL",则此方法返回遵循 RFC 2253 的字符串表示形式,该表示形式具有如下的附加规范要求:

  1. 从编码为点号分隔的十进制 OID 的属性类型中移除前导零。
  2. 类型 PrintableString 和 UTF8String 的 DirectoryString 属性值不是以十六进制形式输出的
  3. 除了类型 PrintableString 和 UTF8String 以外的其他类型的 DirectoryString 属性值是以十六进制形式输出的
  4. 从非十六进制属性值(除非该值完全由空白字符组成)中移除前导和尾部空白字符
  5. 一个或多个空白字符的内部子字符串被转换成非十六进制属性值中的单个空格。
  6. 包括一个以上的 Attribute Value Assertion (AVA) 的相对标识名是按如下顺序输出的:包含标准关键字的 AVA 的字母排序,后跟包含 OID 关键字的 AVA 的数字排序
  7. 属性值中的唯一被转义字符是 RFC 2253 的 2.4 小节中声明必须被转义的那些字符(使用正斜杠字符将它们转义)。
  8. 可以使用 String.toUpperCase(Locale.US) 将整个名称转换为大写的。
  9. 可以使用 String.toLowerCase(Locale.US) 将整个名称转换为小写的。
  10. 最后使用标准化形式 KD 将名称标准化,Unicode Standard 和 UAX #15 中描述了该形式

其他标准格式可能在以后引入。

参数:
format - 要使用的格式
返回:
使用特定格式的此 X500Principal 的字符串表示形式
抛出:
IllegalArgumentException - 如果指定格式无效或者为 null

getName

public String getName(String format,
                      Map<String,String> oidMap)
返回使用指定格式的 X.500 标识名的字符串表示形式。该格式的有效值有 "RFC1779" 和 "RFC2253"(不区分大小写)。不允许 "CANONICAL" 并会抛出 IllegalArgumentException

此方法返回使用 getName(String) 中指定格式的 String,并发出 oidMap 中列出的 OID 的其他属性类型关键字。oidMap 中的 OID 项优先于 getName(String) 所识别的默认 OID。忽略错误地指定的 OID;但是,如果该名称中的 OID 映射到错误地指定的关键字,则抛出 IllegalArgumentException

其他标准格式可能在以后引入。

警告:其他实现可能无法识别其他属性类型关键字;因此,如果不确定其他实现是否识别这些关键字,请不要使用此方法。

参数:
format - 要使用的格式
oidMap - OID 映射,其中每个关键字是一个 String 形式的对象标识符(由句点分隔的非负整数序列),它映射到相应的属性类型关键字 String。映射可以为空但不能为 null
返回:
使用指定格式的此 X500Principal 的字符串表示形式
抛出:
IllegalArgumentException - 如果指定格式无效、为 null 或者名称的 OID 映射到错误地指定的关键字
NullPointerException - 如果 oidMapnull
从以下版本开始:
1.6

getEncoded

public byte[] getEncoded()
返回 ASN.1 DER 编码形式的标识名。X500Principal(byte[] name) 的文档中提供了此结构的 ASN.1 表示法。

注意,返回的字节数组被复制,以防止后续修改。

返回:
包含 ASN.1 DER 编码格式的标识名的字节数组

toString

public String toString()
返回此 X500Principal 的用户友好的字符串表示形式。

指定者:
接口 Principal 中的 toString
覆盖:
Object 中的 toString
返回:
X500Principal 的字符串表示形式

equals

public boolean equals(Object o)
比较指定的 Object 与此 X500Principal 的相等性。

需要特别说明的是,如果 Object o 是一个 X500Principal,并且此对象和 o 二者的规范字符串表示形式(通过 getName(X500Principal.CANONICAL) 方法获得)是相等的,此方法返回 true

此实现与 RFC 2459 的要求是兼容的。

指定者:
接口 Principal 中的 equals
覆盖:
Object 中的 equals
参数:
o - 将与此 X500Principal 进行相等性比较的对象。
返回:
如果指定的 Object 等于此 X500Principal,则返回 true;否则返回 false
另请参见:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
返回此 X500Principal 的哈希码。

哈希码是通过以下方式计算的:getName(X500Principal.CANONICAL).hashCode()

指定者:
接口 Principal 中的 hashCode
覆盖:
Object 中的 hashCode
返回:
X500Principal 的哈希码
另请参见:
Object.equals(java.lang.Object), Hashtable

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策