LdapQuery:高级构建查询

LDAP查询生成器参数
该类LdapQueryBuilder及其关联的类旨在支持可以提供给LDAP搜索的所有参数。支持以下参数:
base - 指定搜索应在其中开始的LDAP树中的根DN。
searchScope - 指定搜索应该遍历的LDAP树的深度。
attributes - 指定要从搜索中返回的属性。默认是全部。
countLimit - 指定从搜索返回的最大条目数。
timeLimit - 指定搜索可能需要的最长时间。
Search filter  - 我们正在查找的条目必须符合的条件。
通过LdapQueryBuilder调用query方法创建一个LdapQueryBuilder。它的目的是作为流畅的构建器API,其中首先定义基本参数,然后是过滤器规范调用。一旦过滤器条件已经开始被调用where方法定义LdapQueryBuilder,稍后尝试呼叫例如base将被拒绝。基本搜索参数是可选的,但至少需要一个过滤器规范调用。

使用objectclass person搜索所有条目
 
ldapTemplate.search(
      query().where("objectclass").is("person"),
      new PersonAttributesMapper());

使用objectclass person和cn = John Doe搜索所有条目
 
ldapTemplate.search(
      query().where("objectclass").is("person")
             .and("cn").is("John Doe"),
      new PersonAttributesMapper());

使用在dc = 261consulting,dc = com处开始的objectclass人员搜索所有条目
 
ldapTemplate.search(
      query().base("dc=261consulting,dc=com")
             .where("objectclass").is("person"),
      new PersonAttributesMapper());

搜索具有开始于dc = 261consulting,dc = com的objectclass人员的所有条目,仅返回cn属性
 
ldapTemplate.search(
      query().base("dc=261consulting,dc=com")
             .attributes("cn")
             .where("objectclass").is("person"),
      new PersonAttributesMapper());
//或用标准搜索
ldapTemplate.search(
      query().where("objectclass").is("person"),
             .and(query().where("cn").is("Doe").or("cn").is("Doo));
      new PersonAttributesMapper());

过滤标准
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) - 使用指定的字符串作为过滤器。请注意,指定的输入字符串不会以任何方式被触及,这意味着如果您要从用户输入构建过滤器,则此方法不是特别适合。
filter(String filterFormat, String… params)- 使用指定的字符串作为输入MessageFormat,正确编码参数并将其插入到过滤器字符串中的指定位置。

注意:您不能将硬编码过滤器方法与上述where方法混合; 它是一个或另一个。这意味着如果你使用过滤器指定了一个过滤器,filter()如果你尝试where之后再调用,你会得到一个异常。
posted @ 2018-05-02 20:46  CryDongle  阅读(265)  评论(0编辑  收藏  举报