我想从ldap搜索特定的用户详细信息。所以我写下了检索用户详细信息的代码,但它返回了用户对象列表。基本上我只想要人物obejct而不是人物对象列表。用于使用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();
}
});
}
答案 0 :(得分:4)
您正在调用的方法,ldapTemplate.search()始终返回匹配对象的列表。这是因为它在LDAP服务器上找到符合条件的所有对象。如果您不确定是否存在与loginId
匹配的用户,那么您已经使用了正确的方法。只需检查列表的长度并从返回的列表中检索第一个项目。
要从LDAP获取单个项目,您需要知道LDAP服务器中用户的可分辨名称(DN)。 DN是LDAP中对象的唯一标识符,如果您要专门查找单个对象,则需要知道这一点。根据您的LDAP配置,这可能类似于cn=<loginId>,ou=users,dc=yourorg,dc=com
。
如果您可以使用loginId
构建DN,则可以使用ldapTemplate.lookup(String, AttributesMapper)方法查找单个对象。