Module java.naming

Class InitialLdapContext

所有已实现的接口:
Context, DirContext, LdapContext

public class InitialLdapContext extends InitialDirContext implements LdapContext
这个类是执行LDAPv3风格的扩展操作和控件的起始上下文。

请参阅javax.naming.InitialContextjavax.naming.InitialDirContext以获取有关同步的详细信息,以及有关如何创建初始上下文的策略。

请求控件

当您创建一个初始上下文(InitialLdapContext)时,可以指定一个请求控件列表。这些控件将被用作上下文或从上下文派生的上下文执行的任何隐式LDAP“绑定”操作的请求控件。这些被称为连接请求控件。使用getConnectControls()来获取上下文的连接请求控件。

提供给初始上下文构造函数的请求控件不会用作后续上下文操作(如搜索和查找)的上下文请求控件。通过使用setRequestControls()来设置和更新上下文请求控件。

如所示,一个上下文可以关联两组不同的请求控件:连接请求控件和上下文请求控件。对于那些需要发送可能不适用于上下文操作和任何隐式LDAP“绑定”操作的关键控件的应用程序,这是必需的。一个典型的用户程序可能会执行以下操作:

 InitialLdapContext lctx = new InitialLdapContext(env, critConnCtls);
 lctx.setRequestControls(critModCtls);
 lctx.modifyAttributes(name, mods);
 Controls[] respCtls =  lctx.getResponseControls();
它首先指定用于创建初始上下文的关键控件(critConnCtls),然后为上下文操作设置上下文的请求控件(critModCtls)。如果由于某种原因lctx需要重新连接到服务器,它将使用critConnCtls。有关请求控件的更多讨论,请参阅LdapContext接口。

服务提供程序实现者应阅读LdapContext类描述中的“服务提供程序”部分以获取实现详细信息。

自:
1.3
另请参阅:
  • Constructor Details

    • InitialLdapContext

      public InitialLdapContext() throws NamingException
      使用没有环境属性或连接请求控件构造初始上下文。等同于new InitialLdapContext(null, null)
      抛出:
      NamingException - 如果遇到命名异常
    • InitialLdapContext

      public InitialLdapContext(Hashtable<?,?> environment, Control[] connCtls) throws NamingException
      使用环境属性和连接请求控件构造初始上下文。请参阅javax.naming.InitialContext以获取有关环境属性的讨论。

      此构造函数不会修改其参数或保存对它们的引用,但可能会保存克隆或副本。调用者不应在传递给构造函数后修改environment中的可变键和值。

      connCtls用作底层上下文实例的连接请求控件。有关详细信息,请参阅类描述。

      参数:
      environment - 用于创建初始DirContext的环境。Null表示空环境。
      connCtls - 用于初始上下文的连接请求控件。如果为null,则不使用连接请求控件。
      抛出:
      NamingException - 如果遇到命名异常
      另请参阅:
  • Method Details

    • extendedOperation

      public ExtendedResponse extendedOperation(ExtendedRequest request) throws NamingException
      从接口复制的描述: LdapContext
      执行扩展操作。此方法用于支持LDAPv3扩展操作。
      指定者:
      extendedOperation 在接口 LdapContext
      参数:
      request - 要执行的非空请求。
      返回:
      操作的可能为null的响应。null表示操作未生成任何响应。
      抛出:
      NamingException - 如果执行扩展操作时发生错误
    • newInstance

      public LdapContext newInstance(Control[] reqCtls) throws NamingException
      从接口复制的描述: LdapContext
      使用请求控件初始化此上下文的新实例。此方法是用于创建此上下文的新实例以支持多线程访问的便利方法。例如,如果多个线程想要使用不同的上下文请求控件,每个线程可以使用此方法获取其自己的此上下文副本,并设置/获取上下文请求控件,而无需与其他线程同步。

      新上下文具有与此上下文相同的环境属性和连接请求控件。有关详细信息,请参阅类描述。如果实现允许此上下文和新上下文共享相同的网络连接或其他资源,而不会妨碍任一上下文的独立性,则可能会这样做。

      指定者:
      newInstance 在接口 LdapContext
      参数:
      reqCtls - 用于新上下文的可能为null的请求控件。如果为null,则上下文将初始化为没有请求控件。
      返回:
      一个非null的LdapContext实例。
      抛出:
      NamingException - 如果创建新实例时发生错误
      另请参阅:
    • reconnect

      public void reconnect(Control[] connCtls) throws NamingException
      从接口复制的描述: LdapContext
      使用提供的控件和此上下文的环境重新连接到LDAP服务器。

      此方法是显式启动LDAP“绑定”操作的一种方式。例如,您可以使用此方法为LDAP“绑定”操作设置请求控件,或者显式连接到服务器以获取LDAP“绑定”操作返回的响应控件。

      此方法将此上下文的connCtls设置为其新的连接请求控件。此上下文的上下文请求控件不受影响。调用此方法后,任何后续的隐式重新连接将使用connCtls。对于从此上下文派生的新上下文实例,这些连接请求控件也将用作连接请求控件。这些连接请求控件不受setRequestControls()的影响。

      服务提供程序实现者应阅读类描述中的“服务提供程序”部分以获取实现详细信息。

      指定者:
      reconnect 在接口 LdapContext
      参数:
      connCtls - 要使用的可能为null的控件。如果为null,则不使用任何控件。
      抛出:
      NamingException - 如果重新连接时发生错误
      另请参阅:
    • getConnectControls

      public Control[] getConnectControls() throws NamingException
      从接口复制的描述: LdapContext
      检索此上下文中生效的连接请求控件。这些控件由JNDI实现拥有,并且是不可变的。调用者不能修改数组或控件。
      指定由:
      getConnectControls 在接口 LdapContext
      返回:
      可能为null的控件数组。null表示未为此上下文设置连接控件。
      抛出:
      NamingException - 如果在获取请求控件时发生错误。
    • setRequestControls

      public void setRequestControls(Control[] requestControls) throws NamingException
      从接口复制的描述: LdapContext
      设置随后在此上下文上调用的方法的请求控件。请求控件由JNDI实现拥有并且是不可变的。调用者不能修改数组或控件。

      这将删除任何先前的请求控件,并添加requestControls以供随后在此上下文上调用的方法使用。此方法不会影响此上下文的连接请求控件。

      请注意,requestControls将在下一次调用setRequestControls()之前生效。如果您不希望控件再影响上下文方法,请显式使用null或空数组调用setRequestControls()以清除控件。要检查此上下文的有效请求控件,请使用getRequestControls()

      指定由:
      setRequestControls 在接口 LdapContext
      参数:
      requestControls - 可能为null的控件。如果为null,则不使用任何控件。
      抛出:
      NamingException - 如果在设置请求控件时发生错误。
      参见:
    • getRequestControls

      public Control[] getRequestControls() throws NamingException
      从接口复制的描述: LdapContext
      检索此上下文生效的请求控件。请求控件由JNDI实现拥有并且是不可变的。调用者不能修改数组或控件。
      指定由:
      getRequestControls 在接口 LdapContext
      返回:
      可能为null的控件数组。如果为null,则表示未为此上下文设置请求控件。
      抛出:
      NamingException - 如果在获取请求控件时发生错误。
      参见:
    • getResponseControls

      public Control[] getResponseControls() throws NamingException
      从接口复制的描述: LdapContext
      检索由此上下文上最后调用的方法产生的响应控件。响应控件由JNDI实现拥有并且是不可变的。调用者不能修改数组或控件。

      这些响应控件可能由成功或失败的操作生成。

      当调用可能返回响应控件的上下文方法时,将清除上一个方法调用产生的响应控件。 getResponseControls()按从LDAP服务器接收的顺序返回上下文方法使用的LDAP操作生成的所有响应控件。调用getResponseControls()不会清除响应控件。您可以多次调用它(并获得相同的控件),直到调用可能返回控件的下一个上下文方法为止。

      指定由:
      getResponseControls 在接口 LdapContext
      返回:
      可能为null的控件数组。如果为null,则表示此上下文上上一个方法调用未产生任何控件。
      抛出:
      NamingException - 如果在获取响应控件时发生错误。