模块 java.naming

类 LdapName

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

public class LdapName extends Object implements Name
此类表示 RFC 2253 指定的专有名称。专有名称或 DN 由称为 relative distinguished name 或 RDN 的有序组件列表组成。 RFC 2253 中描述了 DN 语法的详细信息。

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

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

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

LdapName 将正确解析所有有效名称,但在解析无效名称时不会尝试检测所有可能的违规行为。接受无效名称是“慷慨的”。名称的“有效性”最终是在将名称提供给 LDAP 服务时确定的,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 实例的并发多线程只读访问不需要同步。

除非另有说明,否则将 null 参数传递给此类中的构造方法或方法的行为将导致抛出 NullPointerException。

自从:
1.5
参见:
  • 构造方法总结

    构造方法
    构造方法
    描述
    从给定的专有名称构造一个 LDAP 名称。
    LdapName(List<Rdn> rdns)
    给定其解析的 RDN 组件构造一个 LDAP 名称。
  • 方法总结

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

    在类 java.lang.Object 中声明的方法

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • 构造方法详细信息

    • 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 的非空列表。
  • 方法详情

    • 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()) 范围内。
      返回:
      索引位置的非空组件。
      抛出:
      IndexOutOfBoundsException - 如果位置超出指定范围。
    • getRdn

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

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

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

      public boolean startsWith(Name  n)
      确定此 LDAP 名称是否以指定的 LDAP 名称前缀开头。如果名称 n 等于 getPrefix(n.size()),则它是一个前缀——换句话说,此 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。否则返回假。如果 rdns 为 null,则返回 false。
      参数:
      rdns - 要检查的 Rdn 的序列。
      返回:
      如果 rdns 构成此 LDAP 名称的前缀,则为 true,否则为 false。
    • endsWith

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

      public boolean endsWith(List <Rdn > rdns)
      确定指定的 RDN 序列是否构成此 LDAP 名称的后缀。如果此 LdapName 至少与 rdns 一样长,则返回 true,并且对于范围 [size() - rdns.size(), size()) 中的每个位置 p,组件 getRdn(p) 与 rdns.get(p) 匹配。否则返回假。如果 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 - 要添加的非空后缀 Rdn s。
      返回:
      更新后的名称(不是新实例)。
    • 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。在第一个新 RDN 的索引(如果有)处或之后的此 LDAP 名称的 RDN 向上移动(远离索引 0)以容纳新的 RDN。
      参数:
      posn - 添加后缀 RDN 的索引。必须在 [0,size()] 范围内。
      suffixRdns - 要添加的非空后缀 Rdn s。
      返回:
      更新后的名称(不是新实例)。
      抛出:
      IndexOutOfBoundsException - 如果 posn 超出指定范围。
    • add

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

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

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

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

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

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

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

      public String  toString()
      RFC 2253 定义并在类描述中描述的格式返回此 LDAP 名称的字符串表示形式。如果名称的组成部分为零,则返回空字符串。
      重写:
      toString 在类 Object
      返回:
      LdapName 的字符串表示形式。
    • equals

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

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

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

      public int compareTo(Object  obj)
      将此 LdapName 与指定的对象进行比较以进行排序。返回负整数、零或正整数,因为此名称小于、等于或大于给定的对象。

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

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

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

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

      public int hashCode()
      计算此 LDAP 名称的哈希码。散列码是该名称的各个 RDN 散列码的总和。
      重写:
      hashCode 在类 Object
      返回:
      表示此名称的哈希码的 int。
      参见: