使用javax.naming.spi.DirObjectFactory从LDAP查找对象

时间:2008-11-27 07:50:53

标签: java jndi

我已经实现了一个对象工厂来查找LDAP对象,但是提供的上下文不会从LDAP返回DN(通过nameCtx.getNameInNamespace())。我在某种程度上做错了吗?

public class LdapPersonFactory implements DirObjectFactory {
        @Override
        public Object getObjectInstance(Object obj, Name name, Context nameCtx,
                Hashtable<?, ?> environment, Attributes attrs) throws Exception {
            if (attrs == null)
                return null;
            Attribute oc = attrs.get("objectclass");
            if (oc != null && oc.contains("inetOrgPerson")) {
                String surname = (String) attrs.get("sn").get();
                String givenName = (String) attrs.get("givenname").get();
                String dn = nameCtx.getNameInNamespace();
                return new LdapPerson(dn, givenName, surname);
            }
            return null;
        }
    }

nameCtx.getNameInNamespace()只返回一个空字符串。

3 个答案:

答案 0 :(得分:1)

String dn = (String) attrs.get("dn").get();

这只会引发NamingException 我不认为专有名称(DN)是LDAP对象的属性,它更像是LDAP世界中的身份密钥。

答案 1 :(得分:0)

也许?

String dn = (String) attrs.get("dn").get();

它应该是一个与其他属性一样的属性吗?

答案 2 :(得分:0)

可能是您的上下文指向“根节点”或它所调用的内容。也就是说,具有顶级名称空间的节点作为其子节点。

我想也可能是你在调用getNameInNamespace时没有绑定上下文,尽管我希望抛出异常。

我将spring-ldap用于此类内容,并且没有遇到与其DirContextAdapter和LdapTemplate类相似的错误。但话说回来,我总是将它们绑定到特定的命名空间。