Использование javax.naming.spi.DirObjectFactory для поиска объектов из LDAP - PullRequest
1 голос
/ 27 ноября 2008

Я реализовал фабрику объектов для поиска объектов LDAP, но предоставленный контекст не возвращает DN (через nameCtx.getNameInNamespace ()) из LDAP. Я что-то не так делаю?

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 ]

1 голос
/ 27 ноября 2008
String dn = (String) attrs.get("dn").get();

это выбрасывает только NamingException.
Я не думаю, что отличительное имя (DN) является атрибутом объекта LDAP, это больше похоже на идентификационный ключ в мире LDAP.

0 голосов
/ 14 июня 2009

Возможно, ваш контекст указывает на "корневой узел" или как он там называется. То есть узел, который имеет пространства имен верхнего уровня в качестве своих дочерних элементов.

Полагаю, это также может быть связано с тем, что контекст не связан во время вызова getNameInNamespace, хотя я ожидаю, что это вызовет исключение.

Я использую spring-ldap для такого рода вещей и не сталкивался с подобной ошибкой в ​​классах DirContextAdapter и LdapTemplate. Но опять же, я всегда связываю их с определенным пространством имен.

0 голосов
/ 27 ноября 2008

Может быть?

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

Это должен быть атрибут, как у любого другого?

...