como obter DN no LDAP com o ID do usuário usando o SDK LDAP UnboundID

Eu estou tentando obter um DN (poderia ser mais de um) de um usuário quando o único parâmetro que eu tenho é o id do usuário

Também estou usando UnboundID LDap SDK como você pode ver:

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; } 

vamos supor que meu uid pertence ao seguinte DN

Obrigado de uma cabeça

O problema, nesse caso, é que o elemento “correspondência de DN” não é o que você acha que é. Não é o DN de uma input que corresponde ao critério de pesquisa (que pode, de fato, ser zero, uma ou várias inputs). O elemento DN correspondente de uma resposta pode ser fornecido se o destino da operação não existir. Para uma operação de pesquisa, se você tivesse especificado um DN da base de pesquisa que não existe, o DN correspondente poderia especificar o DN da input mais próxima do que você especificou que realmente existe no servidor. Por exemplo, se você tivesse especificado um DN da base de pesquisa de “ou = inexistente, dc = exemplo, dc = com”, que não existe, mas a input “dc = example, dc = com” não existe, então o servidor pode retornar um valor DN correspondente de “dc = example, dc = com”.

Se a sua pesquisa corresponder a uma ou mais inputs, (a menos que você tenha usado um ouvinte de resultados de pesquisa, que não foi o caso no exemplo fornecido acima), as inputs correspondentes estarão acessíveis por meio do método getSearchEntries. Por exemplo:

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

Além disso, você deve ter cuidado ao construir filtros a partir de suas representações de string quando parte do valor pode vir da input do usuário, pois isso pode permitir algum tipo de ataque de injeção. A injeção de LDAP é mais difícil e geralmente mais benigna do que a SQL, mas não é totalmente inexistente. Portanto, é recomendável que, em vez de:

  String filter = "uid=" + uid; 

você usa:

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