Множественный или синтаксис LDAP - PullRequest
1 голос
/ 21 июня 2011

Я надеюсь, что это простой вопрос для любого эксперта по LDAP.

Я использую Java, SearchDirContext's и построитель строк, чтобы собрать запрос, который выглядит следующим образом: (|(givenName=smith*)(sn=smith*)(middleName=smith*)(mail=smith*)(telephoneNumber=smith*)(buildingName=smith*)(department=smith*)(major=smith*)(minor=smith*)). Идея состоит в том, чтобы позволить пользователю выполнять поиск по одной строке и получать результаты, соответствующие любому из этих атрибутов.

Запрос завершается успешно, но с неточными результатами. Например, если я ищу себя (я знаю, что моя запись существует) ...

  • по фамилии я не получаю результатов
  • по имени (для которого должно быть сотни результатов) Я получаю небольшое подмножество (9), которое не включает мою запись.

Я хотел бы сначала устранить любую возможность для проблем с моим запросом, если вы хотите получить дополнительную информацию / фрагменты кода выполнения кода, дайте мне знать, и я могу предоставить его.

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

------------------- (РЕДАКТИРОВАТЬ) Таким образом, синтаксис правильный .... (РЕДАКТИРОВАТЬ) ------------- -------

Вот код вокруг моего запроса, возможно, это может определить, обрезаются ли мои результаты.

      try {
          context = ldapPooler.getContext(); // Returns a custom SearchDirContext object wrapping a javax.naming.DirContext.
          SearchControls controls = new SearchControls();
          controls.setCountLimit(maxResultCount);

          Integer resultCount = 0;

          // They try block is from an example found at
          // http://www.java2s.com/Code/Java/JNDI-LDAP/howtoperformasearchandlimitthenumberofresultsreturned.htm
          // The goal was to limit the results.

          try {

            logger.debug("Finished w/the search string: " + ldapSearchString);

            @SuppressWarnings("unchecked")
            NamingEnumeration<SearchResult> result = context.search("ou=People", ldapSearchString, controls);
            // SearchDirContext.search simply calls DirContext.search with the passed attributes.

            while (result.hasMore()) {
                searchResults.add(result.next());
                resultCount++;
            }
            logger.debug("Found results: " + resultCount);

          } catch (LimitExceededException lee) {

            logger.debug("Caught LimitExceededException w/resultCount: " + resultCount);

            if (resultCount == maxResultCount) {
                logger.debug("Found " + resultCount + " results.");
            } else {
                logger.debug("In the else....not throwing an exception. Found " + resultCount + " results.");
            }

          } finally {
            context.close();
          }
      } catch (NamingException ne) {
        logger.error("Caught a NamingException while gettingContactCardsBySearchString(" + searchString + ")");
        throw new LdapLookupFailedException(ne);
      } catch (Exception e) {
        logger.error("Caught Exception while gettingContactCardsBySearchString(" + searchString + ")");
        throw new LdapLookupFailedException(e);
      }

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Ваш синтаксис фильтра правильный в соответствии с RFC 4515. Я предлагаю вам не помещать тестовые значения в строку поиска.Используйте нотацию {0}, {1} и укажите значения в качестве аргументов для search ().Вы можете столкнуться с постраничными результатами поиска, когда вы получите меньше, чем ожидалось.Я бы протестировал ваши фильтры с помощью независимого клиента LDAP, такого как JXplorer.

0 голосов
/ 24 июня 2011

Оказывается, это была проблема с разрешениями. Созданная учетная запись не имела доступа к атрибутам, которые я искал. Мне было бы интересно узнать, каков ожидаемый результат запроса по атрибутам, к которым аутентифицированный пользователь не имеет доступа, если кто-то захочет опубликовать это, было бы здорово. В противном случае, я думаю, что узнал немного о LDAP через всю эту сделку, спасибо, что нашли время, чтобы попытаться помочь!

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