【发布时间】:2009-06-22 13:48:14
【问题描述】:
我正在寻找一个独立的 Java 库,它允许我解析 LDAP 样式的过滤器表达式。这样的东西是否可用,或者是否建议使用 ANTLR 并自己构建它?
作为背景:过滤器本身是通过网络提交的,我想创建合适的休眠条件。 我没有对 LDAP 做任何事情!
对于传输和转换用户定义查询的技术独立解决方案的任何其他想法也表示赞赏。
【问题讨论】:
我正在寻找一个独立的 Java 库,它允许我解析 LDAP 样式的过滤器表达式。这样的东西是否可用,或者是否建议使用 ANTLR 并自己构建它?
作为背景:过滤器本身是通过网络提交的,我想创建合适的休眠条件。 我没有对 LDAP 做任何事情!
对于传输和转换用户定义查询的技术独立解决方案的任何其他想法也表示赞赏。
【问题讨论】:
您可以使用 apache 目录服务器的共享 LDAP 库。
它在 maven 中可用
<dependency>
<groupId>org.apache.directory.shared</groupId>
<artifactId>shared-ldap</artifactId>
<version>0.9.15</version>
</dependency>
你可以像这样使用它:
final ExprNode filter = FilterParser.parse(filterString);
【讨论】:
您还可以考虑使用 Apache directory server 来使用它的一些类,例如 lavinio 对 OpenLDAP 的建议,或者将其嵌入到您的应用程序中。
【讨论】:
OpenDS 在名为 LDAPFilter 的类上有一个静态方法,简称为 decode,它接受一个字符串参数,如下所示:
LDAPFilter parsed = LDAPFilter.decode(filter);
javadoc 是here。
它与 Apache DS 的 FilterParser 非常相似,但处理结果略有不同,因为没有真正的实质性继承层次结构。我发现的一个优点是它没有重写可扩展的匹配规则语法,因此如果您将其视为验证和规范化过滤器的一种方式,请牢记这一点。
需要注意的是,两个解析器都希望事先过滤掉空格,因此请确保事先在任何输入字符串上运行类似这样的内容:
filter.replaceAll("\\s?([\\(\\|&!=:\\)])\\s?", "$1");
希望这会有所帮助。
【讨论】:
我知道的唯一 LDAP 解析库是 .NET 的 System.DirectoryServices。*理论上,您应该能够在 Mono 中使用这个库来获得技术独立性(除了来自 mono 或 .net 本身)。
【讨论】:
您是否查看过 jldap,它是 OpenLDAP 的一部分?
source is available,还有用于解析 LDAP URL 和 搜索表达式 的类。这超出了您的需要,但您可以只使用对象,而无需针对 LDAP 服务器实际执行它们,如果您想要这样做的话。
【讨论】:
【讨论】:
大多数 OSGi 容器也包含此功能,因为 these kinds of filters are part of the OSGi specification。
【讨论】: