Module java.naming

Class LdapName

java.lang.Object
javax.naming.ldap.LdapName
所有已实现的接口:
Serializable, Cloneable, Comparable<Object>, Name

public class LdapName extends Object implements Name
此类表示由RFC 2253指定的显式名称。显式名称或DN由一个有序的组件列表组成,称为相对显式名称或RDN。 DN的语法细节在RFC 2253中描述。

此类解决了RFC 2253中发现的一些歧义,具体如下:

  • RFC 2253未定义术语“空格”。 ASCII空格字符0x20(“ ”)用于替代。
  • 允许在','、';'、'='和'+'的两侧使用空格。此类代码接受此类空格,但不生成它,并在比较名称时忽略它。
  • 接受包含'='或非前导'#'字符(未转义)的AttributeValue字符串。

传递给LdapName或由其返回的字符串名称使用完整的Unicode字符集。它们还可以包含使用UTF-8编码的字符,其中每个八位字节由一个三字符子字符串表示,例如“\\B4”。但是,它们不能包含使用每个八位字节由字符串中的单个字符表示的UTF-8编码的字符:含义将是模棱两可的。

LdapName将正确解析所有有效名称,但在解析无效名称时不会尝试检测所有可能的违规。它在接受无效名称时是“慷慨的”。名称的“有效性”最终在将其提供给LDAP服务器时确定,该服务器可能根据其模式信息和互操作性考虑接受或拒绝名称。

在测试名称是否相等时,属性类型,包括二进制和字符串值,不区分大小写。具有不同但等效的引号、转义或UTF8十六进制编码用法的字符串值被视为相等。多值RDN中组件的顺序(例如“ou=Sales+cn=Bob”)不重要。

LDAP名称的组件,即RDN,是编号的。具有n个RDN的LDAP名称的索引范围从0到n-1。此范围可以写为[0,n)。最右边的RDN位于索引0,最左边的RDN位于索引n-1。例如,显式名称:“CN=Steve Kille,O=Isode Limited,C=GB”按以下顺序编号,范围从0到2:{C=GB,O=Isode Limited,CN=Steve Kille}。空LDAP名称由空RDN列表表示。

对于LdapName实例的并发多线程只读访问无需同步。

除非另有说明,在此类的构造函数或方法中将空参数传递会导致抛出NullPointerException。

自:
1.5
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    LdapName(String name)
    从给定的显式名称构造LDAP名称。
    LdapName(List<Rdn> rdns)
    给定其解析的RDN组件,构造LDAP名称。
  • Method Summary

    Modifier and Type
    Method
    Description
    add(int posn, String comp)
    在此LDAP名称中的指定位置添加单个组件。
    add(int posn, Rdn comp)
    在此LDAP名称中的指定位置添加单个RDN。
    add(String comp)
    在此LDAP名称的末尾添加单个组件。
    add(Rdn comp)
    在此LDAP名称的末尾添加单个RDN。
    addAll(int posn, List<Rdn> suffixRdns)
    按顺序在此名称的指定位置添加名称的RDN。
    addAll(int posn, Name suffix)
    按顺序在此名称的指定位置添加名称的组件。
    addAll(List<Rdn> suffixRdns)
    按顺序在此名称的末尾添加名称的RDN。
    addAll(Name suffix)
    按顺序在此名称的末尾添加名称的组件。
    clone()
    生成此名称的新副本。
    int
    将此LdapName与指定的对象进行比较以确定顺序。
    boolean
    endsWith(List<Rdn> rdns)
    确定指定的RDN序列是否形成此LDAP名称的后缀。
    boolean
    确定此LDAP名称是否以指定的LDAP名称后缀结束。
    boolean
    equals(Object obj)
    确定两个LDAP名称是否相等。
    get(int posn)
    将此LDAP名称的组件作为字符串检索。
    getAll()
    将此名称的组件作为字符串枚举检索。
    getPrefix(int posn)
    创建一个名称,其组件由此LDAP名称的组件的前缀组成。
    Rdn
    getRdn(int posn)
    将此LDAP名称的RDN作为Rdn检索。
    检索相对显式名称的列表。
    getSuffix(int posn)
    创建一个名称,其组件由此LDAP名称中的组件的后缀组成。
    int
    计算此LDAP名称的哈希码。
    boolean
    确定此LDAP名称是否为空。
    remove(int posn)
    从此LDAP名称中删除一个组件。
    int
    size()
    检索此LDAP名称中的组件数。
    boolean
    startsWith(List<Rdn> rdns)
    确定指定的RDN序列是否形成此LDAP名称的前缀。
    boolean
    确定此LDAP名称是否以指定的LDAP名称前缀开头。
    返回此LDAP名称的字符串表示形式,格式由RFC 2253定义,并在类描述中描述。

    Methods declared in class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • LdapName

      public LdapName(String name) throws InvalidNameException
      从给定的显式名称构造LDAP名称。
      参数:
      name - 这是根据RFC 2253定义的非空显式名称。
      抛出:
      InvalidNameException - 如果检测到语法违规。
      参见:
    • LdapName

      public LdapName(List<Rdn> rdns)
      给定其解析的RDN组件,构造LDAP名称。

      列表中RDN的索引遵循类描述中描述的RDN编号。

      参数:
      rdns - 形成此LDAP名称的非空Rdn列表。
  • Method Details

    • size

      public int size()
      检索此LDAP名称中的组件数。
      指定者:
      size 在接口 Name
      返回:
      此LDAP名称中组件的非负数。
    • isEmpty

      public boolean isEmpty()
      确定此LDAP名称是否为空。空名称是具有零个组件的名称。
      指定者:
      isEmpty 在接口 Name
      返回:
      如果此LDAP名称为空,则为true;否则为false。
    • getAll

      public Enumeration<String> getAll()
      将此名称的组件作为字符串枚举检索。对此名称的更新对此枚举的影响是未定义的。如果名称具有零个组件,则返回一个空(非空)枚举。枚举返回的组件的顺序与类描述中描述的组件编号顺序相同。
      指定者:
      getAll 在接口 Name
      返回:
      此LDAP名称的组件的非空枚举。枚举的每个元素均为String类。
    • get

      public String get(int posn)
      将此LDAP名称的组件作为字符串检索。
      指定者:
      get 在接口 Name
      参数:
      posn - 要检索的组件的基于0的索引。必须在范围[0,size())内。
      返回:
      索引为posn的非空组件。
      抛出:
      IndexOutOfBoundsException - 如果posn超出指定范围。
    • getRdn

      public Rdn getRdn(int posn)
      将此LDAP名称的RDN作为Rdn检索。
      参数:
      posn - 要检索的RDN的基于0的索引。必须在范围[0,size())内。
      返回:
      索引为posn的非空RDN。
      抛出:
      IndexOutOfBoundsException - 如果posn超出指定范围。
    • getPrefix

      public Name getPrefix(int posn)
      创建一个名称,其组件由此LDAP名称的组件的前缀组成。对此名称的后续更改不会影响返回的名称,反之亦然。
      指定者:
      getPrefix 在接口 Name
      参数:
      posn - 要停止的组件的基于0的索引。必须在范围[0,size()]内。
      返回:
      由索引范围[0,posn)中的组件组成的LdapName实例。如果posn为零,则返回一个空的LDAP名称。
      抛出:
      IndexOutOfBoundsException - 如果posn超出指定范围。
    • getSuffix

      public Name getSuffix(int posn)
      创建一个名称,其组件由此LDAP名称中的组件的后缀组成。对此名称的后续更改不会影响返回的名称,反之亦然。
      指定者:
      getSuffix 在接口 Name
      参数:
      posn - 要开始的组件的基于0的索引。必须在范围[0,size()]内。
      返回值:
      由范围[posn,size())中索引处的组件组成的LdapName实例。如果posn等于size(),则返回一个空的LDAP名称。
      抛出:
      IndexOutOfBoundsException - 如果posn在指定范围之外。
    • startsWith

      public boolean startsWith(Name n)
      确定此LDAP名称是否以指定的LDAP名称前缀开头。如果名称n等于getPrefix(n.size()),则名称n是前缀--换句话说,此LDAP名称以'n'开头。如果n为null或不是类描述中描述的RFC2253格式的名称,则返回false。
      指定者:
      startsWith 在接口 Name
      参数:
      n - 要检查的LDAP名称。
      返回值:
      如果n是此LDAP名称的前缀,则返回true,否则返回false。
      参见:
    • startsWith

      public boolean startsWith(List<Rdn> rdns)
      确定指定的RDN序列是否形成此LDAP名称的前缀。如果此LdapName至少与rdns一样长,并且在范围[0, rdns.size())中的每个位置p上,组件getRdn(p)与rdns.get(p)匹配,则返回true。否则返回false。如果rdns为null,则返回false。
      参数:
      rdns - 要检查的Rdn序列。
      返回值:
      如果rdns形成此LDAP名称的前缀,则返回true,否则返回false。
    • endsWith

      public boolean endsWith(Name n)
      确定此LDAP名称是否以指定的LDAP名称后缀结尾。如果名称n等于getSuffix(size()-n.size()),则名称n是后缀--换句话说,此LDAP名称以'n'结尾。如果n为null或不是类描述中描述的RFC2253格式的名称,则返回false。
      指定者:
      endsWith 在接口 Name
      参数:
      n - 要检查的LDAP名称。
      返回值:
      如果n是此名称的后缀,则返回true,否则返回false。
      参见:
    • endsWith

      public boolean endsWith(List<Rdn> rdns)
      确定指定的RDN序列是否形成此LDAP名称的后缀。如果此LdapName至少与rdns一样长,并且在范围[size() - rdns.size(), size())中的每个位置p上,组件getRdn(p)与rdns.get(p)匹配,则返回true。否则返回false。如果rdns为null,则返回false。
      参数:
      rdns - 要检查的Rdn序列。
      返回值:
      如果rdns形成此LDAP名称的后缀,则返回true,否则返回false。
    • addAll

      public Name addAll(Name suffix) throws InvalidNameException
      将名称的组件按顺序添加到此名称的末尾。
      指定者:
      addAll 在接口 Name
      参数:
      suffix - 要添加的非空组件。
      返回值:
      更新后的名称(不是新实例)。
      抛出:
      InvalidNameException - 如果suffix不是有效的LDAP名称,或者添加组件会违反此LDAP名称的语法规则。
    • addAll

      public Name addAll(List<Rdn> suffixRdns)
      将名称的RDN按顺序添加到此名称的末尾。
      参数:
      suffixRdns - 要添加的非空后缀Rdns。
      返回值:
      更新后的名称(不是新实例)。
    • addAll

      public Name addAll(int posn, Name suffix) throws InvalidNameException
      将名称的组件按顺序添加到此名称中的指定位置。在第一个新组件的索引之后的位置处,此LDAP名称的组件(如果有)将向上移动(远离索引0)以容纳新组件。
      指定者:
      addAll 在接口 Name
      参数:
      posn - 要添加新组件的索引。必须在范围[0,size()]内。
      suffix - 要添加的非空组件。
      返回值:
      更新后的名称(不是新实例)。
      抛出:
      InvalidNameException - 如果suffix不是有效的LDAP名称,或者添加组件会违反此LDAP名称的语法规则。
      IndexOutOfBoundsException - 如果posn在指定范围之外。
    • addAll

      public Name addAll(int posn, List<Rdn> suffixRdns)
      将名称的RDN按顺序添加到此名称中的指定位置。此LDAP名称中在第一个新RDN的索引之后的位置处的RDN将向上移动(远离索引0)以容纳新的RDN。
      参数:
      posn - 要添加后缀RDNs的索引。必须在范围[0,size()]内。
      suffixRdns - 要添加的非空后缀Rdns。
      返回值:
      更新后的名称(不是新实例)。
      抛出:
      IndexOutOfBoundsException - 如果posn在指定范围之外。
    • add

      public Name add(String comp) throws InvalidNameException
      将单个组件添加到此LDAP名称的末尾。
      指定者:
      add 在接口 Name
      参数:
      comp - 要添加的非空组件。
      返回值:
      更新后的LdapName,而不是新实例。不能为null。
      抛出:
      InvalidNameException - 如果在名称末尾添加comp会违反名称的语法。
    • add

      public Name add(Rdn comp)
      将单个RDN添加到此LDAP名称的末尾。
      参数:
      comp - 要添加的非空RDN。
      返回值:
      更新后的LdapName,而不是新实例。不能为null。
    • add

      public Name add(int posn, String comp) throws InvalidNameException
      在此LDAP名称中的指定位置添加单个组件。在新组件的索引之后的位置处,此LDAP名称中的组件将向上移动一个位置(远离索引0)以容纳新组件。
      指定者:
      add 在接口 Name
      参数:
      posn - 要添加新组件的索引。必须在范围[0,size()]内。
      comp - 要添加的非空组件。
      返回值:
      更新后的LdapName,而不是新实例。不能为null。
      抛出:
      IndexOutOfBoundsException - 如果posn在指定范围之外。
      InvalidNameException - 如果在指定位置添加comp会违反名称的语法。
    • add

      public Name add(int posn, Rdn comp)
      在此LDAP名称中的指定位置添加单个RDN。在新RDN的索引之后的位置处,此LDAP名称中的RDN将向上移动一个位置(远离索引0)以容纳新的RDN。
      参数:
      posn - 要添加新RDN的索引。必须在范围[0,size()]内。
      comp - 要添加的非空RDN。
      返回值:
      更新后的LdapName,而不是新实例。不能为null。
      抛出:
      IndexOutOfBoundsException - 如果posn在指定范围之外。
    • remove

      public Object remove(int posn) throws InvalidNameException
      从此LDAP名称中删除一个组件。将删除指定位置处的此名称的组件。大于此位置的索引的组件(如果有)将向下移动一个位置(朝向索引0)。
      指定者:
      remove 在接口 Name
      参数:
      posn - 要删除的组件的索引。必须在范围[0,size())内。
      返回值:
      被删除的组件(一个字符串)。
      抛出:
      IndexOutOfBoundsException - 如果posn在指定范围之外。
      InvalidNameException - 如果删除组件会违反名称的语法规则。
    • getRdns

      public List<Rdn> getRdns()
      检索相对区分名称的列表。返回的列表的内容不可修改。返回的列表中的RDN的索引遵循类描述中描述的RDN的编号。如果名称没有任何组件,则返回一个空列表。
      返回值:
      作为RDN列表的名称,这些RDN是Rdn的实例。
    • clone

      public Object clone()
      生成此名称的新副本。对此名称的组件的后续更改不会影响新副本,反之亦然。
      指定者:
      clone 在接口 Name
      覆盖:
      clone 在类 Object
      返回:
      返回此LDAP名称的副本。
      参见:
    • toString

      public String toString()
      返回此LDAP名称的字符串表示形式,格式由RFC 2253定义,并在类描述中描述。如果名称没有任何组件,则返回空字符串。
      覆盖:
      toString 在类 Object
      返回:
      LdapName的字符串表示形式。
    • equals

      public boolean equals(Object obj)
      确定两个LDAP名称是否相等。如果obj为null或不是LDAP名称,则返回false。

      如果一个LDAP名称中的每个RDN等于另一个LDAP名称中对应的RDN,则两个LDAP名称相等。这意味着两个名称具有相同数量的RDN,并且每个RDN与另一个名称中的对应RDN的equals()测试返回true。有关RDN相等性的定义,请参见Rdn.equals(Object obj)

      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的可能为null的对象。
      返回:
      如果obj等于此LDAP名称,则返回true;否则返回false。
      参见:
    • compareTo

      public int compareTo(Object obj)
      将此LdapName与指定的对象进行比较以确定顺序。根据此名称小于、等于或大于给定对象的情况返回负整数、零或正整数。

      如果obj为null或不是LdapName的实例,则抛出ClassCastException。

      LDAP名称的排序遵循字符串比较的词典规则,其中所有RDN都按照指定的顺序排列并进行词典排序比较。有关RDN比较规则,请参见Rdn.compareTo(Object obj)

      如果此LDAP名称在字典顺序上小于obj,则返回负数。如果此LDAP名称在字典顺序上大于obj,则返回正数。

      指定者:
      compareTo 在接口 Comparable<Object>
      指定者:
      compareTo 在接口 Name
      参数:
      obj - 要与之比较的非null LdapName实例。
      返回:
      负整数、零或正整数,表示此名称小于、等于或大于给定的obj。
      抛出:
      ClassCastException - 如果obj为null或不是LdapName。
      参见:
    • hashCode

      public int hashCode()
      计算此LDAP名称的哈希码。哈希码是此名称的各个RDN的哈希码之和。
      覆盖:
      hashCode 在类 Object
      返回:
      代表此名称的哈希码的int值。
      参见: