Поиск LDAP в Java: DN содержит, - PullRequest
1 голос
/ 25 мая 2011

В настоящее время у меня возникают проблемы при поиске записей, где DN содержит запятую:

StringTokenizer st = new StringTokenizer(dn, "=");
Attributes searchAttributes = new BasicAttributes(st.nextToken(), st.nextToken());
Enumeration results = ctx.search(baseDn, searchAttributes);

if (results.hasMoreElements()) {
  // ...
}

Я протестировал и dn=first,second, и dn=first\,second, и , хотя поиск выполняется правильно, я никогда не получаю никаких результатов обратно . Те же baseDn и dn работают правильно в обозревателе LDAP Eclipse / Apache Directory Studio.

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Правила цитирования для запросов ldap можно найти по адресу http://www.rlmueller.net/CharactersEscaped.htm

Я использую следующий фрагмент кода для запроса cn, должен работать так же для dn:

    String searchFilter = "(&(objectClass=user)(cn=" + query + "))";
    SearchControls searchControls = new SearchControls();
    String[] resultAttributes = {"cn", "distinguishedName", "displayName", "lastLogon", "description"};
    searchControls.setReturningAttributes(resultAttributes);
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

    NamingEnumeration ne = getContext().search(root, searchFilter, searchControls);

    List<DirectoryUser> result = new ArrayList<DirectoryUser>();
    while (ne.hasMoreElements()) {
        SearchResult searchResult = (SearchResult)ne.nextElement();
        Attributes attrs = searchResult.getAttributes();
        ...
    }
1 голос
/ 25 мая 2011

зависит от библиотек, например, при использовании Novell ldap.jar is constuctor

searchResults = lc.search(searchBase, searchScope, searchFilter, null, false);
//private String searchFilter = "(objectClass=*)"; 

опять зависит или от библиотек, потому что, возможно, LDAP-браузер Directory Studio имеет собственный драйвер, а некоторые методы реализованы другим, а может и нет, например, с помощью ldap.jar может выполнять поиск в ActiveDirectory

В основном все библиотеки (включая драйвер Java для Windows ActiveDirectory) содержат множество примеров, упакованных библиотекой, для большинства важных методов, которые реализованы в драйвере

EDIT:

ммм, но есть два соответствующих

1 / доступ для контекста, предоставленный администратором (между средами) 2 / с ActiveDirectory (всегда) и с (старой ПК) тестовой средой для LDAP, я должен вызвать для потока (ов) небольшую паузу

private void readData() {
        searchResults = new LDAPSearchResults();
        try {
            Thread.sleep(450);
        } catch (InterruptedException ex) {
            Logger.getLogger(Profylaxia.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            searchResults = lc.search(searchBase, searchScope, searchFilter, null, false);
            try {
                Thread.sleep(500);
            } catch (InterruptedException ex) {
                Logger.getLogger(Profylaxia.class.getName()).log(Level.SEVERE, null, ex);
            }
            int noResult = searchResults.getCount();
            System.out.println("  noResult : " + noResult);

// тогда я смогу начать итерации ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...