我有以下LDAP方案:
每个子树都包含组织单位团队。我想从特定的子树中找到所有团队。为此,我使用LdapTemplate
类和findAll()
方法。
ldapTemplate.findAll(Team.class);
当我将LdapContextSource
设置为dc=global,dc=id,dc=pl
时,它会从全局子树返回我的团队。当我将基数更改为dc=id,dc=pl
时,它会返回所有子树中的团队。
问题是我想使用动态库,从特定的子树中查找团队。我已经尝试了多种方法来实现这一点,但它们都没有给我结果。
方法1:查找
Name nameBase = LdapUtils.newLdapName("dc=global");
return ldapTemplate.find(query().base(nameBase).where("ou").is("team"), Team.class);
返回空列表
方法2:findAll
Name nameBase = LdapUtils.newLdapName("dc=global");
SearchControls searchControls = new SearchControls();
return ldapTemplate.findAll(nameBase, searchControls, Team.class);
返回空列表
起初看起来工作正常,因为当我将子树名称更改为不存在的名称时,我得到javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]
为什么我在此代码中获得正确结果的任何想法:
LdapContextSource contextSource = new LdapContextSource();
contextSource.setBase("dc=global,dc=id,dc=pl");
LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
return ldapTemplate.findAll(Team.class);
这个空列表:
LdapContextSource contextSource = new LdapContextSource();
contextSource.setBase("dc=id,dc=pl");
LdapTemplate ldapTemplate = new LdapTemplate(contextSource);
Name nameBase = LdapUtils.newLdapName("dc=global");
SearchControls searchControls = new SearchControls();
return ldapTemplate.findAll(nameBase, searchControls, Team.class);
我使用Spring-ldap-core 2.0.3
答案 0 :(得分:0)
我找到了解决方案。
<强>第一强>
为SearchControls
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
return ldapTemplate.findAll(base, searchControls, Team.class);
<强>第二强>
更改查询参数以检查 cn 是否存在
return ldapTemplate.find(query().base(base).where("cn").isPresent(), Team.class);