如何使用spring在ldap中执行搜索操作

时间:2011-06-22 04:45:07

标签: java ldap spring-ldap

我想从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();
                }
            });


}

1 个答案:

答案 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)方法查找单个对象。