LDAP模板按多个属性搜索

时间:2015-09-25 07:00:08

标签: spring spring-ldap

尝试使用userid,emailid,firstname,lastname,GUID等搜索用户详细信息...将来需要添加的更多值

应使用非空的所有属性执行搜索。 在网上找到这段代码*

  

String filter =“(&(sn = YourName)(mail = *))”;

* 是否有任何其他预定义的模板或类似的搜索,更优化的方式,而无需直接指定值为Null或为每个属性使用if else语句?必须将所有值传递给方法,并且必须使用非空值来使用LDAP进行搜索。什么?请帮忙。

1 个答案:

答案 0 :(得分:3)

您可以在运行时有效地使用过滤器来指定要用于搜索的内容以及不依赖于某些规则或属性上的NULL验证的内容。请找到使用ldapTemplate中的过滤器获取人名的示例代码: -

public static final String BASE_DN = "dc=xxx,dc=yyy";
private LdapTemplate ldapTemplate ;
public List getPersonNames() { 
    String cn = "phil more";
    String sn = "more";
    AndFilter filter = new AndFilter();
    filter.and(new EqualsFilter("objectclass", "person"));
    filter.and(new EqualsFilter("sn", sn));
    filter.and(new WhitespaceWildcardsFilter("cn", cn));
    return ldapTemplate.search(
       BASE_DN, 
       filter.encode(),
       new AttributesMapper() {
          public Object mapFromAttributes(Attributes attrs)
             throws NamingException {
             return attrs.get("cn").get();
          }
       });
 }

顾名思义,AndFilters加入查找中使用的所有单个过滤器,如EqualFilter,它检查属性是否相等,而WhitespaceWildcardsFilter则执行通配符搜索。所以这里我们得到cn = phil更多,它反过来使用*phil*more*进行搜索。