我试图实现一个程序来进行LDAP的JNDI查找。我看到有来自Apache viz的开源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?
如果这是正确的,那么不应该由Apache本身提供LDAP SPI服务,因为我使用过Apache的LDAP?
" com.sun.jndi.ldap.LdapCtxFactory"正在使用Apache DS? " com.sun.jndi.ldap.LdapCtxFactory"是Sun / Oracle的实现。这是否意味着任何SPI都可以与任何供应商的服务提供商合作(在这种情况下,服务提供商来自Apache)?
答案 0 :(得分:1)
服务提供商是LDAP - > apacheds-2.0.0-M20(目录服务)。
没有。服务提供者是JNDI LDAP SPI。 LDAP服务器是ApacheDS。
- 醇>
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
这是否说明使用“com.sun.jndi.ldap.LdapCtxFactory”作为LDAP SPI服务API?
是
- 如果这是正确的,那么不应该由Apache本身提供LDAP SPI服务,因为我使用过Apache的LDAP?
醇>
没有。 Apache提供了LDAP 服务器的实现。 JNDI LDAP SPI是客户端。
- “com.sun.jndi.ldap.LdapCtxFactory”如何与Apache DS配合使用?
醇>
因为他们都说LDAP线协议。
“com.sun.jndi.ldap.LdapCtxFactory”是Sun / Oracle的实现。
这是LDAP客户端的实现。
这是否意味着任何SPI都可以与任何供应商的服务提供商合作(在这种情况下,服务提供商来自Apache)?
在这种情况下,Apache不是服务提供商。它是LDAP服务器。你的术语很混乱。
以上所述意味着任何LDAP客户端都可以使用任何LDAP服务器,这是任何协议定义的重点。