2011-06-29 47 views
3

有提供的SocketFactory到InitialLdapContext的静态方法:有没有办法将SocketFactory _instance_提供给InitialLdapContext?

env.put("java.naming.ldap.factory.socket", MySocketFactory.class.getName()); 
new InitialLdapContext(env, null); 

不过是有一些方法来提供实例本身,而不是它的类名?我的套接字工厂使用可信证书的输入流参数化,并且可以配置具有不同可信证书的多个InitialLdapContext实例。顺便说一句,这将在OSGi环境中运行。

在此先感谢。

+0

我想要做同样的事情 - 我问这个问题之前 - 我目前正在使用线程本地存储来做到这一点 - 请参阅:http://stackoverflow.com/questions/6424422/how-to-pass-arguments-to-an-ldap-custom-socket-factory- with-jndi – Conor

+0

谢谢s的小费。今天我玩了Apache LDAP API,它更容易和更清洁:-) –

回答

1

检查源com.sun.jndi.ldap.Connection.createSocket(String, int, String, int)我可以看到,不幸的是没有办法做到这一点。很多Java核心API都有这种糟糕的设计,这真让人难过。

解决办法可能是使用不同的实现:

  • 网景LdapSdk
  • OpenLDAP的JLDAP
  • Apache目录LDAP API
相关问题