[LDAP] problème pour récupérer des données
Bonjonr ! Mon problème est que je veut récupérer des utilisateur ayant un champs non complété comme par exemple le champ mail.
J'ai cette fonction de recherche dans LDAP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| /**
* Fonction permettant d'effectuer une recherche paramétrée
* @param typeCritere : l'attribut sur lequel la recherche va s'effectuer (exemple : "department")
* @param valeurCritere : la valeur que ce critère doit avoir pour être valable comme résultat
* @param Attributs : les attributs que l'on souhaite avoir avec le resultat (exemple : { "cn","distinguishedName","description" })
* @param OU : la racine à partir de laquelle on veut commencer à chercher les resultats pertinents (exemple : "CN=Valence,DC=postal,DC=local")
* @param SCOPE : 0 pour OBJECT_SCOPE, 1 pour ONELEVEL_SCOPE,2 pour SUBTREE_SCOPE
* @return une collection comprenant tous les résultats de la recherche efféctuée
*/
public Collection Rechercher(String typeCritere, String valeurCritere, String[] Attributs, String OU, int SCOPE)
{
String searchFilter = "(" + typeCritere + "=" + valeurCritere + ")"; // création du filtre de recherche
String[] attrIDs = Attributs; // attributs à récupérer
Collection Results = new ArrayList() ;
int nbResult = 0 ;
try
{
SearchControls ctls = new SearchControls(); // contrôles de recherche
ctls.setReturningAttributes(attrIDs); // configuration de la récupération des éléments
ctls.setSearchScope(SCOPE); // configuration de la portée
NamingEnumeration searchRes = ldapContext.search(OU,searchFilter,ctls); // exécute la recherche
while (searchRes.hasMoreElements()) // hasMoreElements ne renvoie jamais d'erreur
{
SearchResult result = (SearchResult) searchRes.next(); // on recupère l'objet résultat
Results.add(result) ;
}
}
catch (InvalidSearchFilterException isfe)
{
System.out.println("Erreur au niveau du filtre de la recherche...");
return null;
}
catch (InvalidSearchControlsException isce)
{
System.out.println("Erreur au niveau du controle de la recherche...");
return null;
}
catch (NamingException ne)
{
System.out.println("Erreur au niveau du nom de la recherche...");
return null;
}
catch (Exception e)
{
System.out.println("Erreur...");
return null;
}
return Results;
} |
Et donc pour ma recherche du champ vide je fait :
Code:
1 2
|
ArrayList listTmp = (ArrayList) ConAD.Rechercher("&(" + champTmp.getCodechamp(),'"")(objectClass=user)',listeAttributs,"DC=postal,DC=local",2); |
ConAD => ma connection à l'AD
champTmp.getCodechamp() => le nom du champ vide à rechercher
listeAttributs => le tableau correspondant à la liste des attributs à retourner
2 => le SCOPE de la recherche (ici SUBTREE_SCOPE)
Je suis passé en debuggage avec JBuilder un bon nombre de fois et à chaque fois la fonction a les bons paramètres mais à l'execution c'est comme si il ne trouver aucun enregistrements... (pas d'erreurs retourner non plus)
Je ne comprend donc pas tout à fait d'où vient l'erreur ...
Je vous remercie d'avance de l'aide que vous pourrez m'apporter et je reste à disposition pour de plus ample explications !
Arf les problèmes continuent !
Bon maintenant que j'ai trouvé les explications pour les filtres, j'en ai fait un joli qui ne retourne pas d'exception mais qui ne me renvoi aucune informations ce qui n'est pas normal ...
Ce filtre le voici :
Code:
((&(description= )(objectClass=user))|(&(!(description=*))(objectClass=user)))
Il est fait pour retourner tous les user n'ayant pas pas de description ou ayant une description avec un espace seulement. Mais il ne retourne rien ...
J'ai aussi fait quelques essais et je trouve certaines choses pas normal !
En effet ce filtre fonctionne :
mais pas celui-ci qui pourtant est des plus simpliste ! :
Code:
(&(!(description=*))(objectClass=user))
Pourtant tous ces filtres sont apparament bons car ne retournent pas de InvalidSearchFilterException !
Merci aux personnes qui pourraient m'éclairer, je sens que ma solution est toute proche ! :cry: