0

我一直在为我们的一个应用程序实现 UnboundID 内存中 ldap 服务器,但是从一开始我就遇到了一个问题:

我需要与我们的生产服务器建立一次连接才能使用以下方式获取架构:

  Schema newSchema = Schema.getSchema(connection);
  config.setSchema(newSchema); 

文档说要使用 ssl 连接到 LDAP 服务器,我需要使用 SSUtil,例如:

 SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());

 LDAPConnection connection =
    new LDAPConnection(sslUtil.createSSLSocketFactory());
 connection.connect("server.example.com", 636);

我厌倦了上述内容,编译器抱怨

  The constructor LDAPConnection(SSLSocketFactory) is undefined

并且在调查时LDAPConnection确实没有这样的构造函数。我正在使用unboundid-ldapsdk-se.jarjar,有人知道解决这个问题的方法吗?

4

1 回答 1

2

实际上有一个与提供的签名匹配的构造函数。该构造函数是:

  /**
   * Creates a new LDAP connection using the specified socket factory.  No
   * actual network connection will be established.
   *
   * @param  socketFactory  The socket factory to use when establishing
   *                        connections.  If it is {@code null}, then a default
   *                        socket factory will be used.
   */
  public LDAPConnection(final SocketFactory socketFactory)
  {
    this(socketFactory, null);
  }

SSLSocketFactory 是 SocketFactory 的子类,因此示例中包含的代码应该可以正常工作。我刚刚通过使用这三行(创建 SSLUtil、创建 LDAPConnection 和建立连接)创建一个类来确认这一点,并且它使用 JDK 5、JDK 6 和 JDK 7 编译时没有任何警告或错误。

此外,为了解决另一条评论,LDAP SDK 不建议创建 TrustAllTrustManager。它确实提供了一个使用 TrustAllTrustManager 的示例,但下面还有另一个示例演示了使用信任库的过程。此外,TrustAllTrustStore 类的文档表明它仅推荐用于测试目的。不过,我刚刚提交了对 SSLUtil 示例的更改,这使得该建议更加清晰。

于 2013-06-26T05:29:59.240 回答