用于LDAP的JNDI SPI提供程序(Apache DS)

时间:2015-06-07 09:14:45

标签: java ldap jndi

我试图实现一个程序来进行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(目录服务)。

  1. env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");这是否告诉您使用" com.sun.jndi.ldap.LdapCtxFactory"作为LDAP SPI服务API?

  2. 如果这是正确的,那么不应该由Apache本身提供LDAP SPI服务,因为我使用过Apache的LDAP?

  3. " com.sun.jndi.ldap.LdapCtxFactory"正在使用Apache DS? " com.sun.jndi.ldap.LdapCtxFactory"是Sun / Oracle的实现。这是否意味着任何SPI都可以与任何供应商的服务提供商合作(在这种情况下,服务提供商来自Apache)?

1 个答案:

答案 0 :(得分:1)

  

服务提供商是LDAP - > apacheds-2.0.0-M20(目录服务)。

没有。服务提供者是JNDI LDAP SPI。 LDAP服务器是ApacheDS。

  
      
  1. env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");这是否说明使用“com.sun.jndi.ldap.LdapCtxFactory”作为LDAP SPI服务API?
  2.   

  
      
  1. 如果这是正确的,那么不应该由Apache本身提供LDAP SPI服务,因为我使用过Apache的LDAP?
  2.   

没有。 Apache提供了LDAP 服务器的实现。 JNDI LDAP SPI是客户端。

  
      
  1. “com.sun.jndi.ldap.LdapCtxFactory”如何与Apache DS配合使用?
  2.   

因为他们都说LDAP线协议。

  

“com.sun.jndi.ldap.LdapCtxFactory”是Sun / Oracle的实现。

这是LDAP客户端的实现。

  

这是否意味着任何SPI都可以与任何供应商的服务提供商合作(在这种情况下,服务提供商来自Apache)?

在这种情况下,Apache不是服务提供商。它是LDAP服务器。你的术语很混乱。

以上所述意味着任何LDAP客户端都可以使用任何LDAP服务器,这是任何协议定义的重点。