2010-02-15 5 views
2

J'ai des problèmes avec les filtres de recherche ldap. Je veux rechercher parmi tous les enfants d'un nœud racine. Je veux que les utilisateurs où le nom d'utilisateur de l'email contient la chaîne de requête. par exemple, si jeldap filtre de recherche avec Java

et la requête de recherche est "lc" Je veux seulement [email protected] Le code suivant, étonnamment, renvoie le premier et le second.

String query = "..."; 
DirContext dc = ...; 
NamingEnumeration<SearchResult> ne = dc.search(root, 
    "(email=*{0}*@*)", 
    new Object[] { query }, null); 

Qu'est-ce qui ne va pas dans le filtre de requête "*...*@*"?

Répondre

1

Je ne peux pas vous donner une réponse complète, mais si vous essayez un ldapsearch depuis la ligne de commande avec le filtre "(email=*l.c*@*)", vous devriez obtenir les bons enregistrements ... donc je dirais que le problème est dans la méthode Java et non dans le filtre.

Espérons que cela pourrait vous aider.

+0

malheureusement ATM Je n'ai pas linux machine w/ldapsearch installé. Le seul gestionnaire LDAP que j'ai est JXplorer qui retourne tous les enregistrements, pas seulement les bons. Je crois qu'il est écrit en java lui-même, donc je ne sais pas si c'est moi ou java. –

0

Je suppose que vous avez oublié de coller le code qui a formaté votre requête et son paramètre {0}? edit: wow, oublie moi, je ne connaissais même pas la méthode qui prend le tableau filterArgs.

Comme une note de côté, l'attribut standard pour l'adresse e-mail dans inetOrgPerson est « mail » pas « email » (mais il pourrait être différent sur votre cas bien sûr)