LDAP не возвращает никаких результатов - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть фрагмент кода Java, который выполняет простой поиск в Active Directory.Код работает должным образом при использовании нашей рабочей AD, но при использовании того же кода в нашей тестовой AD никакие результаты не возвращаются (исключение или ошибка не выдается).

При использовании браузера AD на моей машине явозможность просматривать и искать в тестовой AD и находить результаты, которые я ищу.

AD предоставляет доступ на чтение всем, так что это не проблема с разрешениями.

Кто-нибудь знает, что можетбыть причиной того, что он не возвращает никаких результатов моему java-клиенту, но делает это моим браузером?

Java-код:

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, Constants.LDAPURL);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.REFERRAL, "follow");
        DirContext dctx = new InitialDirContext(env);

        String base = Constants.LDAPQUERYLOCATION;

        SearchControls sc = new SearchControls();
        String[] attributeFilter = {"cn", "sAMAccountName", "sn", "distinguishedName"};
        sc.setReturningAttributes(attributeFilter);
        sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

        String filter = "(&(objectClass=User)(sn=smith))";
        NamingEnumeration results = dctx.search(base, filter, sc);
        if(!results.hasMore()){
            log.debug("No results found");
        }
        while (results.hasMore()) {
            SearchResult sr = (SearchResult) results.next();
            Attributes attrs = sr.getAttributes();
            Attribute attr = attrs.get("cn");
            log.debug("cn: "+attr.get());
            attr = attrs.get("sn");
            log.debug("sn: "+attr.get());
            attr = attrs.get("distinguishedName");
            log.debug("dn: "+attr.get());
        }
        dctx.close();

У меня нет контроля над AD, поэтому я не могудействительно предоставить много информации о его настройке.

1 Ответ

0 голосов
/ 25 ноября 2011

Только что попробовал ваш код в моей сети, которая использует OpenLDAP - я знаю, что это не то же самое, что AD, , но :

Я также не получил результатов, пока не изменил строку filter на эту:

String filter = "(&(objectClass=inetOrgPerson)(sn=smith))";

Я получил этот inetOrgPerson класс объектов, отследив каталог с помощью браузера LDAP. Это длинный путь, но возможно ли, что ваша тестовая AD не использует те же классы объектов, что и рабочий сервер?

Быстрый Google показывает мне, что реализация Microsoft стандарта LDAP поначалу отсутствовала, но теперь должна быть (более) совместимой с использованием inetOrgPerson - возможно, ваш тестовый AD работает на более старой версия с проблемами, в то время как ваш prod box на последней версии? Или, может быть, наоборот?

...