Existe-t-il une bibliothèque Java autonome fournissant une analyse syntaxique de style LDAP?

StackOverflow https://stackoverflow.com/questions/1027307

  •  06-07-2019
  •  | 
  •  

Question

Je recherche une bibliothèque Java autonome qui me permette d'analyser les expressions de filtre de style LDAP. Une telle option est-elle disponible ou est-il conseillé d'utiliser ANTLR à la place et de le construire par un individu?

Comme arrière-plan: le filtre lui-même est soumis via un réseau, et je souhaite créer, par exemple, les critères d'hibernation appropriés. Je ne fais rien avec LDAP!

Toutes les autres idées de solution indépendante de la technologie pour transférer et transformer les requêtes définies par l'utilisateur sont également appréciées.

Était-ce utile?

La solution

Vous pouvez utiliser la bibliothèque LDAP partagée du serveur d'annuaire Apache.

Il est disponible dans maven à

<dependency>
  <groupId>org.apache.directory.shared</groupId>
  <artifactId>shared-ldap</artifactId>
  <version>0.9.15</version>
</dependency>

Et vous pouvez l'utiliser comme:

final ExprNode filter = FilterParser.parse(filterString);

Autres conseils

Vous pouvez également utiliser serveur de répertoire Apache pour utiliser certaines de ses classes telles que la suggestion de lavinio OpenLDAP ou de l'intégrer dans votre application.

OpenDS a une méthode statique sur une classe appelée LDAPFilter appelée simplement, décoder , qui prend un argument de chaîne, comme suit:

LDAPFilter parsed = LDAPFilter.decode(filter);

Le javadoc est ici .

Il est très similaire au FilterParser d’Apache DS, bien que l’utilisation du résultat soit un peu différente car il n’ya pas de véritable hiérarchie d’héritage substantielle. Un de mes avantages est que la syntaxe des règles de correspondance extensible n’a pas été réécrite. Par conséquent, si vous envisagez cette possibilité comme un moyen de valider et de normaliser les filtres, gardez-la à l’esprit.

Une mise en garde est que les deux analyseurs s'attendent à ce que les espaces blancs soient préalablement filtrés. Assurez-vous donc que vous exécutez quelque chose comme ceci sur une chaîne d'entrée au préalable:

filter.replaceAll("\\s?([\\(\\|&!=:\\)])\\s?", "$1");

J'espère que cela vous aidera.

Les seules bibliothèques que je connaisse qui analysent LDAP sont celles de .NET, System.DirectoryServices. * En théorie, vous devriez pouvoir utiliser cette bibliothèque dans Mono pour obtenir une indépendance technologique (autre que mono ou .net).

Avez-vous examiné jldap dans le cadre d’OpenLDAP?

La source est disponible , et il existe des classes pour analyser à la fois les URL LDAP et les expressions de recherche . C’est plus que ce dont vous avez besoin, mais vous pourrez peut-être n’utiliser que les objets sans les exécuter sur un serveur LDAP, si c’est ce que vous souhaitez faire.

pour préciser, les définissez-vous comme des requêtes de style LDAP, si vous n’essayez pas d’interroger LDAP.

avez-vous regardé quelque chose comme ça?

http://josql.sourceforge.net/

La plupart des conteneurs OSGi contiennent également cette fonctionnalité, car de ce type. des filtres font partie de la spécification OSGi .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top