【发布时间】:2015-06-07 09:14:44
【问题描述】:
我试图实现一个程序来为 LDAP 进行 JNDI 查找。我看到有来自 Apache 的开源 LDAP,即:apacheds-2.0.0-M20
下面是我写的程序:
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import javax.naming.directory.InitialDirContext;
class JndiLDAPLookup {
public static void main(String[] args) throws Exception {
Context ctx = null;
Object obj = null;
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS,"secret");
env.put(Context.PROVIDER_URL,"ldap://127.0.0.1:10389");
ctx = new InitialDirContext(env);
obj = ctx.lookup("uid=admin,ou=system");
System.out.println("Connection Successful.");
} catch(NamingException nex){
System.out.println("LDAP Connection: FAILED");
nex.printStackTrace();
}
}
}
上述程序成功运行,但我有一些疑问。
服务提供者是LDAP --> apacheds-2.0.0-M20(目录服务)。
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");这是否表明使用“com.sun.jndi.ldap.LdapCtxFactory”作为 LDAP SPI 服务 API?如果这是正确的,那么 LDAP SPI 服务不应该由 Apache 自己提供,因为我使用了 Apache 的 LDAP 吗?
“com.sun.jndi.ldap.LdapCtxFactory”如何与 Apache DS 配合使用? “com.sun.jndi.ldap.LdapCtxFactory”是来自 Sun/Oracle 的实现。这是否意味着任何 SPI 都可以与任何供应商的服务提供商合作(在这种情况下,服务提供商来自 Apache)?
【问题讨论】: