高级 LDAP 查询

本节介绍了如何将LDAP查询与Spring LDAP一起使用。spring-doc.cadn.net.cn

LDAP 查询生成器参数

LdapQueryBuilder及其关联的类旨在支持可以提供给 LDAP 搜索的所有参数。支持以下参数:spring-doc.cadn.net.cn

LdapQueryBuilder是通过调用query方法LdapQueryBuilder. 它旨在作为一个流畅的构建器 API,其中首先定义基本参数,然后是过滤器规范调用。一旦开始定义过滤器条件,即可调用where方法LdapQueryBuilder,稍后尝试调用(例如)base被拒绝。基本搜索参数是可选的,但至少需要一个过滤器规范调用。以下查询搜索对象类为Person:spring-doc.cadn.net.cn

示例 1.搜索具有对象类的所有条目Person
import static org.springframework.ldap.query.LdapQueryBuilder.query;
...

List<Person> persons = ldapClient.search()
      .query(query().where("objectclass").is("person"))
      .toList(new PersonAttributesMapper());

以下查询搜索对象类为personcn(通用名)的John Doe:spring-doc.cadn.net.cn

示例 2.搜索具有对象类的所有条目personcn=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(域组件)dc=261consulting,dc=com:spring-doc.cadn.net.cn

示例 3.搜索具有对象类的所有条目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(域组件)dc=261consulting,dc=com:spring-doc.cadn.net.cn

示例 4.搜索具有类的所有条目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):spring-doc.cadn.net.cn

示例 5.搜索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 过滤器中的简单等于条件。LDAP 查询生成器支持以下条件类型:spring-doc.cadn.net.cn

  • is:指定等于 (=) 条件。spring-doc.cadn.net.cn

  • gte:指定大于或等于 (>=) 条件。spring-doc.cadn.net.cn

  • lte:指定小于或等于 (⇐) 条件。spring-doc.cadn.net.cn

  • like:指定查询中可以包含通配符的“like”条件,例如where("cn").like("J*hn Doe")结果显示为以下筛选器:(cn=J*hn Doe).spring-doc.cadn.net.cn

  • whitespaceWildcardsLike:指定将所有空格替换为通配符的条件 - 例如,where("cn").whitespaceWildcardsLike("John Doe")结果显示为以下筛选器:(cn=John*Doe).spring-doc.cadn.net.cn

  • isPresent:指定检查是否存在属性的条件,例如where("cn").isPresent()结果显示为以下筛选器:(cn=*).spring-doc.cadn.net.cn

  • not:指定应否定当前条件 - 例如where("sn").not().is("Doe)结果显示为以下筛选器:(!(sn=Doe))spring-doc.cadn.net.cn

硬编码过滤器

有时,您可能希望将硬编码过滤器指定为LdapQuery.LdapQueryBuilder为此有两种方法:spring-doc.cadn.net.cn

  • filter(String hardcodedFilter):使用指定的字符串作为筛选器。请注意,指定的输入字符串不会以任何方式被触及,这意味着如果要根据用户输入构建筛选器,则此方法不是特别适合。spring-doc.cadn.net.cn

  • filter(String filterFormat, String…​ params):使用指定的字符串作为输入MessageFormat,正确编码参数并将其插入到过滤器字符串中的指定位置。spring-doc.cadn.net.cn

  • filter(Filter filter):使用指定的筛选器。spring-doc.cadn.net.cn

不能将硬编码的筛选方法与where前面描述的方法。它要么是其中之一。如果使用filter(),如果您尝试调用where之后。spring-doc.cadn.net.cn