我想从 ldap 搜索特定用户详细信息。所以我写下了以下代码来检索用户详细信息,但它返回用户对象列表。基本上我只想要人对象而不是人对象列表。为了检索,我使用 LDAP 模板。我如何修改此代码以使其返回 person 对象?
public void searchByFirstName(String loginId) {
AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("objectclass", "Person"));
filter.and(new EqualsFilter("cn", loginId));
List list = ldapTemplate.search("",
filter.encode(),
new AttributesMapper() {
public Object mapFromAttributes(Attributes attrs) throws NamingException {
return attrs.get("sn").get();
}
});
}
最佳答案
您正在调用的方法,ldapTemplate.search()始终返回匹配对象的列表。这是因为它正在 LDAP 服务器上查找与您的条件匹配的所有对象。如果您不确定是否有某个用户与您的 loginId
相匹配存在,您已经使用了正确的方法。只需检查列表的长度并从返回的列表中检索第一项。
要从 LDAP 中仅获取单个项目,您需要知道 LDAP 服务器中用户的专有名称 (DN)。 DN 是 LDAP 中对象的唯一标识符,如果您要专门查找单个对象,则需要知道这一点。根据您的 LDAP 配置,这可能类似于 cn=<loginId>,ou=users,dc=yourorg,dc=com
.
如果您可以从 loginId
构建 DN你有,你可以使用 ldapTemplate.lookup(String, AttributesMapper)方法只查找单个对象。
关于java - 如何使用spring在ldap中执行搜索操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434999/