此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring LDAP 3.2.8! |
高级 LDAP 查询
本节介绍了如何将 LDAP 查询与 Spring LDAP 一起使用的各种方法。
LDAP 查询生成器参数
这LdapQueryBuilder
及其关联的类旨在支持可提供给 LDAP 搜索的所有参数。
支持以下参数:
-
base
:指定 LDAP 树中应开始搜索的根 DN。 -
searchScope
:指定搜索应遍历 LDAP 树的深度。 -
attributes
:指定要从搜索中返回的属性。默认值为 all。 -
countLimit
:指定要从搜索中返回的最大条目数。 -
timeLimit
:指定搜索可能需要的最长时间。 -
搜索过滤器:我们正在寻找的条目必须满足的条件。
一LdapQueryBuilder
是通过调用query
method 的LdapQueryBuilder
.它旨在用作 Fluent Builder API,其中首先定义基本参数,然后定义过滤器规范调用。开始后,通过调用where
method 的LdapQueryBuilder
,稍后尝试调用 (例如)base
被拒绝。基本搜索参数是可选的,但至少需要一个过滤器规范调用。
以下查询搜索对象类为Person
:
Person
import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person"))
.toList(new PersonAttributesMapper());
以下查询搜索对象类为person
以及cn
(通用名)John Doe
:
person
和cn=John Doe
import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person").and("cn").is("John Doe"))
.toList(new PersonAttributesMapper());
以下查询搜索对象类为person
并从dc
(domain 组件) 的dc=261consulting,dc=com
:
person
起价dc=261consulting,dc=com
import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().base("dc=261consulting,dc=com").where("objectclass").is("person"))
.toList(new PersonAttributesMapper());
以下查询返回cn
(公用名)属性,用于对象类为person
并从dc
(domain 组件) 的dc=261consulting,dc=com
:
Person
起价dc=261consulting,dc=com
,仅返回cn
属性import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
Stream<Person> persons = ldapClient.search()
.query(query().base("dc=261consulting,dc=com")
.attributes("cn")
.where("objectclass").is("person")),
.toStream(new PersonAttributesMapper());
以下查询使用or
要搜索通用名称的多个拼写 (cn
):
or
标准import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
Stream<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person"),
.and(query().where("cn").is("Doe").or("cn").is("Doo"))
.toStream(new PersonAttributesMapper());
筛选条件
前面的示例演示了 LDAP 过滤器中的简单 equals 条件。LDAP 查询生成器支持以下条件类型:
-
is
:指定等于 (=) 条件。 -
gte
:指定大于或等于 (>=) 条件。 -
lte
:指定小于或等于 (⇐) 条件。 -
like
:指定一个“like”条件,其中通配符可以包含在查询中,例如where("cn").like("J*hn Doe")
在以下筛选器中生成:(cn=J*hn Doe)
. -
whitespaceWildcardsLike
:指定一个条件,其中所有空格都替换为通配符,例如where("cn").whitespaceWildcardsLike("John Doe")
在以下筛选器中生成:(cn=John*Doe)
. -
isPresent
:指定检查是否存在属性的条件,例如where("cn").isPresent()
在以下筛选器中生成:(cn=*)
. -
not
:指定当前条件应被否定 — 例如,where("sn").not().is("Doe)
在以下筛选器中生成:(!(sn=Doe))
硬编码过滤器
在某些情况下,您可能希望将硬编码过滤器指定为LdapQuery
.LdapQueryBuilder
有两种方法来实现此目的:
-
filter(String hardcodedFilter)
:使用指定的字符串作为筛选条件。请注意,指定的 input 字符串不会以任何方式被触及,这意味着如果您根据用户 input 构建过滤器,则此方法不是特别适合。 -
filter(String filterFormat, String… params)
:使用指定的字符串作为输入MessageFormat
,对参数进行正确编码并将其插入到筛选条件字符串中的指定位置。 -
filter(Filter filter)
:使用指定的筛选器。
您不能将硬编码的筛选方法与where
方法。要么是这个,要么是那个。如果使用filter()
,如果尝试调用where
之后。