LdapQuery元素是否是添加剂?

时间:2015-02-26 21:00:04

标签: spring-security spring-ldap

我尝试使用Springs LdapQuery运行搜索,但行为并不完全符合我的预期。我的直觉是我提供的过滤器越多,工作数据集就越小。相反,似乎过滤器彼此独立地行动,然后那些各种工作集在返回之前一起被挤出,经常导致以下错误" [LDAP:错误代码11-超出管理限制]"

以下是我的搜索的清理版本:

public List<OurUser> search(String nameSearchString, String city) {

        ldapTemplate.setDefaultCountLimit(100);//return up to 100 users
        LdapQuery query = query()
                .searchScope(SearchScope.ONELEVEL)
                .base("ou=People")
                .where("objectclass").is("inetOrgPerson")
                .and(query().
                                where("userStatus").is("Active")
                                .and("userEmployer").is("OurCompany")
                                .and("ou").is(city)
                )
                .and(query().where("cn").like(nameSearchString + "*")
                                .or("sn").like(nameSearchString + "*")
                                .or("givenName").like(nameSearchString + "*")
                                .or("primaryEmail").like(nameSearchString + "*")
                                .or("someUID").like(nameSearchString + "*")
                                .or("employeeId").like(nameSearchString + "*")
                                .or("someOtherUID").like(nameSearchString + "*")
                );


        List<OurUser> users = ldapTemplate.search(query, ourUserContextMapper);
        return users;

    }

让我们假设城市搜索标准总是被填充(如何&#34;洛杉矶&#34;)。 namesSearchString可以变化,因为它是用户真正搜索的值。当我们有几个字符(&#34; STEW&#34;)时,它按预期运行,但只有一两个我们看到上面提到的错误(&#34; S&#34;)。这个错误在某种程度上是有道理的,因为找一个有&#34; S&#34;在任何这些领域中都将检索整个组织中的大量匹配....但在我的脑海中添加了其他查询参数,添加了&#34; city&#34;在将名称/ sn / etc查询应用到之前,限制会自动将该列表缩小到远低于100人

这让我觉得我在这里遗漏了一些东西,或者我在尝试将sql谓词处理与ldap进行比较时犯了一个错误。

所以,我的问题的根源是: 1)我对谓词组合的方式缺少什么? 2)如何(如果可能的话)我可以强制查询首先按城市限制,然后应用辅助&#34;名称&#34;过滤条件?

谢谢!

1 个答案:

答案 0 :(得分:0)

这里的关键是错误信息。请注意,它没有声明“超出大小限制”,而是“超出管理限制”,这完全意味着其他内容。 “超出管理限制”通常是指一个名为“透视限制”的设置,如果您考虑它,则在这种情况下有意义。

问题需要在LDAP服务器上解决,或者通过更改外观限制,或者通过强制缩小搜索空间,就像你在第二个问题中暗示的那样。我最好的办法是确保将最重要的搜索字段(在这种情况下为userEmployer和/或ou)编入索引。这应该强制服务器首先应用这些过滤器,从而充分限制系统需要查看的项目数。