Comment construire un filtre de recherche pour un de java ldap api de recherche ,lorsque le nom de l'objet a, simple ou double citation
J'ai un objet, cn=abc"and'def
dans le répertoire. Je suis en utilisant le Java API de recherche:
public LDAPSearchResults search(java.lang.String base,
int scope,
java.lang.String filter,
java.lang.String[] attrs,
boolean typesOnly,
LDAPSearchConstraints cons)
throws LDAPException
J'ai essayé de donner le filtre de recherche comme abc"and'def
et aussi comme abc\"and\'def
. Les deux de retour:
Mauvais filtre de recherche
S'il vous plaît aidez-moi à la façon de construire le filtre de recherche lorsque le nom de l'objet a, simple ou double citation.
Vous devez vous connecter pour publier un commentaire.
L'ensemble de filtre de recherche LDAP doit être valide UTF-8 chaîne. Il y a cinq (5) des valeurs qui, s'ils apparaissent dans un filtre de recherche, doit être échappé à l'aide d'une barre oblique inverse
\
et les deux chiffres du code hexadécimal du caractère d'échappement. Les valeurs qui doivent être échappés sont*
,(
,)
,\
, et l'octet nul0
; par conséquent, le"
et la'
juridiques et les caractères valides dans le filtre de recherche. Dans un langage comme Java qui contient une chaîne de caractères littérale entre"
personnages, la"
personnage apparaissant dans le cadre de la chaîne de caractères littérale doit être échappé.Dans un exemple, vous liste le filtre avec une barre oblique inverse
\
de caractère dans le filtre. Une barre oblique inverse doit être échappé dans le filtre à l'aide d'une barre oblique inverse et le code hexadécimal de la barre oblique inverse, par exemple,"(cn=abc\5c\"and'def)'"
. Dans l'autre exemple, vous liste que le filtre"(cn=abc"and'def)"
qui est en fait une recherche juridique sur le filtre, ignorant le fait que l'intérieur"
est pas échappé, comme il doit l'être pour la compilation.Par exemple, j'ai créé un objet dans un répertoire sur mon localhost l'écoute sur le port 1389 avec le préfixe ou le contexte de nommage de
dc=example,dc=com
à l'aide de la suite LDIF:J'ai écrit une classe Java à la recherche pour l'entrée, jetant une erreur d'assertion si il ne devrait pas être trouvé:
Cette classe compile et lance une erreur d'assertion comme prévu, car l'entrée pour laquelle il recherche n'est, en fait, existent. Voir RFC 4515 pour plus d'informations concernant le filtre de recherche. Le LDAPSDK utilisé est l'excellent SDK de UnboundID. Notez que le
"
personnage est échappé dans le filtre de sorte que la classe de compiler, mais qui n'a rien à voir avec le texte du filtre lui-même.Utiliser la force du filtre à gérer échapper pour votre. Quelque chose comme:
- Je utiliser JNDI et l'un des recherche (la) surcharges que prendre un "filterArgs' argument. Ne tous les la trajectoire nécessaire pour vous.