【问题标题】:JNDI SPI provider for LDAP (Apache DS)LDAP 的 JNDI SPI 提供程序 (Apache DS)
【发布时间】: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(目录服务)。

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

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

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

【问题讨论】:

    标签: java ldap jndi


    【解决方案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?

    是的。

    1. 如果这是正确的,那么 LDAP SPI 服务不应该由 Apache 自己提供,因为我使用了 Apache 的 LDAP 吗?

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

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

    因为它们都使用 LDAP 有线协议。

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

    这是一个LDAP客户端的实现。

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

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

    以上所有的意思是任何 LDAP 客户端都可以与任何 LDAP 服务器一起工作,这是任何协议定义的重点。

    【讨论】:

    • 感谢您提供详细信息。我正在阅读在线材料,例如coderpanda.com/jndi-tutorial 和来自 oracle 的文档。我不确定我是否错误地误解了他们的文档。我将“服务提供商”解释为提供“产品”的人,例如来自 Apache 的 LDAP。如果不是这样,那么在这种情况下,“服务提供者”的含义是什么。请在评论中查看上面的链接。
    • 请再次阅读我的回答。当我已经告诉您确切的服务提供商是什么时,我不明白为什么您仍然有这个错误的概念,不仅在这里,而且在其他几个答案中。它似乎没有陷入困境。总的来说,我对阅读任意互联网垃圾没有兴趣,你也不应该。坚持官方文档。但是,快速浏览您提供的链接,它不包含任何可以证明您的误解的内容。他们甚至提供了一张图片。
    • 感谢您对我提出的所有问题的回复。我把这些清除了。非常感谢您的帮助。最好的问候
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 2023-03-23
    • 2016-04-08
    相关资源
    最近更新 更多