Вопрос по java, ldap-query – Как получить DN в LDAP с идентификатором пользователя, используя UnboundID LDAP SDK

3

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

также я использую UnboundID LDap SDK, как вы можете видеть:

public String getCustomerAdminDN(String uid)
{

    String result =null;
    String filter = "uid=" +uid;
    try {
        SearchResult searchResult = this.ldapConnection.search("",SearchScope.SUB,filter);

        result = searchResult.getMatchedDN();
    } catch (LDAPSearchException e) {
        throw new RuntimeException("Error in the searching query :" + e.getMessage());
    }

  return result;
}

давайте предположим, что мой идентификатор принадлежит следующему DN

Спасибо из головы

Ваш Ответ

1   ответ
4

что «совпадающее DN» элемент не то, что вы думаете. Это не DN записи, которая соответствует критериям поиска (которая может фактически быть нулевой, одной или несколькими записями). Соответствующий элемент DN ответа может быть предоставлен, если цель операции не существует. Для операции поиска, если вы указали базовое DN поиска, которого не существует, то сопоставленное DN может указать DN ближайшей записи к тому, что вы указали, который действительно существует на сервере. Например, если вы указали для DN базы поиска значение "ou = несуществующий", dc = example, dc = com & quot ;, который не существует, а запись & quot; dc = example, dc = com & quot; запись существует, тогда сервер может вернуть соответствующее значение DN, равное «dc = пример, dc = com».

Если ваш поиск соответствует одной или нескольким записям, то (если только вы не использовали прослушиватель результатов поиска, что было не так в приведенном выше примере), соответствующие записи будут доступны через метод getSearchEntries. Например:

 List<SearchResultEntry> searchEntries = searchResult.getSearchEntries();
 if (searchEntries.size() != 1)
 {
   // The search didn't match exactly one entry.
 }
 else
 {
   SearchResultEntry entry = searchEntries.get(0);
   result = entry.getDN();
 }

Кроме того, вы должны быть осторожны при построении фильтров из их строковых представлений, когда часть значения может исходить от пользовательского ввода, так как это может позволить некоторую атаку с помощью внедрения. Инъекция LDAP более сложна и обычно более безопасна, чем SQL, но она не полностью отсутствует. Поэтому рекомендуется вместо:

 String filter = "uid=" + uid;

ты используешь:

 Filter filter = Filter.createEqualityFilter("uid", uid);

Похожие вопросы