|
对于最新稳定版本,请使用 Spring LDAP 4.0.0! |
高级LDAP查询
本节涵盖了多种如何将 LDAP 查询与 Spring LDAP 结合使用的方法。
LDAP 查询构建器参数
这LdapQueryBuilder其相关类别旨在支持所有可提供给LDAP搜索的参数。
支持以下参数:
-
基础: 指定LDAP树中搜索应从哪里开始的根DN。 -
搜索范围: 指定搜索应穿越 LDAP 树的深度。 -
属性: 指定从搜索中返回的属性。默认就是全部。 -
计数限制: 指定搜索返回的最大条目数。 -
时间限制: 指定搜索的最大时间。 -
搜索筛选:我们寻找的条目必须满足条件。
一LdapQueryBuilder是通过调用查询方法LdapQueryBuilder.它旨在作为一个流流构建 API,先定义基础参数,然后是过滤器规范调用。一旦过滤器条件开始定义,调用哪里方法LdapQueryBuilder,随后尝试呼叫(例如)基础被拒绝。基础搜索参数是可选的,但至少需要调用一个过滤器规范。
以下查询搜索所有对象类为人:
人import static org.springframework.ldap.query.LdapQueryBuilder.query;
...
List<Person> persons = ldapClient.search()
.query(query().where("objectclass").is("person"))
.toList(new PersonAttributesMapper());
以下查询搜索所有对象类为人以及一个快递 之 家(通用名称)无名氏:
人和cn=约翰·多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());
以下查询搜索所有对象类为人并且从一个直流(域分量)DC=261consulting,dc=com:
人起点为DC=261consulting,dc=comimport 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());
以下查询返回快递 之 家(通用名)所有对象类为 的条目人并且从一个直流(域分量)DC=261consulting,dc=com:
人起点为DC=261consulting,dc=com,只返回快递 之 家属性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());
以下查询的用途或搜索一个共同名称的多种拼写(快递 之 家):
或标准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());
Filter标准
前面的例子展示了LDAPFilter中的简单等价条件。LDAP查询构建器支持以下标准类型:
-
是: 指定一个等于 (=) 的条件。 -
GTE: 指定一个大于等于(>=)条件。 -
电梯: 指定一个小于等(⇐)条件。 -
喜欢: 指定一个“相似”条件,其中可以包含万用符——例如,其中(“cn”)。like(“J*hn Doe”)结果如下:(cn=J*hn Doe). -
空白空间万用卡类: 指定一个条件,使所有空白空间被百搭符替换——例如,其中(“cn”)。空白空间万用卡类(“John Doe”)结果如下:(cn=约翰*无名氏). -
isPresent(在场): 指定一个检查属性存在的条件——例如,其中(“cn”).isPresent()结果如下:(cn=*). -
不: 指定当前条件应被否定——例如,其中(“sn”).not().is(“Doe”结果如下:(!(sn=Doe))
硬编码Filter
有时你可能想指定硬编码的Filter作为输入LdapQuery.LdapQueryBuilder为此有两种方法:
-
filter(字符串hardcodedFilter):使用指定的字符串作为过滤器。注意,指定的输入字符串不会被任何方式修改,这意味着如果你是根据用户输入构建过滤器,这种方法并不特别适用。 -
filter(String filterFormat, String...参数):使用指定的字符串作为输入消息格式,正确编码参数并将其插入过滤字符串中指定的位置。 -
Filter(Filter):使用指定的Filter。
你不能将硬编码的滤波方法与哪里前面提到的方法。只能选择其中之一。如果你通过以下方式指定一个过滤器filter()如果你尝试打电话,会有例外哪里之后。