我正在为我们的某个应用程序实现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.jar
jar,有没有人知道如何解决这个问题?
答案 0 :(得分: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示例进行了更改,这使得此建议更加清晰。