Spring security LdapQuery元素是加法的吗?

Spring security LdapQuery元素是加法的吗?,spring-security,spring-ldap,Spring Security,Spring Ldap,我正在尝试使用Springs LdapQuery运行搜索,但其行为与我预期的不完全一样。我的直觉是,我提供的过滤器越多,工作数据集就越小。相反,这些过滤器似乎彼此独立运行,然后这些不同的工作集在返回之前混合在一起,通常会导致以下错误[LDAP:错误代码11-超出管理限制] 以下是我的搜索的净化版本: public List<OurUser> search(String nameSearchString, String city) { ldapTemplate.set

我正在尝试使用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;

    }
让我们假设城市搜索条件总是填充的,那么洛杉矶呢。NameSearchString可能会有所不同,因为它是用户真正搜索的值。当我们有几个字符时,它会按预期运行,但只有一个或两个字符,我们会看到上面提到的错误S。这个错误在一定程度上是有意义的,因为在这些字段中查找有S的人将检索整个组织中的大量匹配项。。。。但在我看来,随着其他查询参数的添加,城市限制的添加会自动将该列表缩小到100人以下,然后再对其应用name/sn/etc查询

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

因此,我的问题的根源是: 1关于谓词的组合方式,我遗漏了什么? 2如果可能,我如何强制查询首先按城市进行限制,然后应用辅助名称筛选条件


谢谢

这里的关键是错误消息。请注意,它并没有说明超出了大小限制,而是说明超出了管理限制,这意味着完全不同的内容。“超出管理限制”通常指的是一个名为“查找限制”的设置,如果您仔细考虑的话,它在本例中是有意义的

这个问题需要在LDAP服务器上解决,或者通过更改查找限制,或者通过强制缩小搜索空间,就像您在第二个问题中暗示的那样。我的最佳选择是确保本例中最重要的搜索字段:userEmployer和/或ou都已编制索引。这将迫使服务器首先应用这些过滤器,从而充分限制系统需要查看的项目数量