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

Raj*_*aje 2 java ldap spring-ldap

我想从 ldap 搜索特定用户详细信息。所以我写下了以下代码来检索用户详细信息,但它返回用户对象列表。基本上我只想要人对象而不是人对象列表。使用 LDAP 模板检索 IM。我如何修改此代码以使其返回 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();
                }
            });


}
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 5

您调用的方法ldapTemplate.search()始终返回匹配对象的列表。这是因为它正在 LDAP 服务器上查找与您的条件匹配的所有对象。如果您不确定是否loginId存在与您匹配的用户,那么您已经使用了正确的方法。只需检查列表的长度并从返回的列表中检索第一项。

要从 LDAP 中仅获取单个项目,您需要知道LDAP 服务器中用户的专有名称(DN)。DN 是 LDAP 中对象的唯一标识符,如果您要专门查找单个对象,则需要知道这一点。根据您的 LDAP 配置,这可能类似于cn=<loginId>,ou=users,dc=yourorg,dc=com.

如果您可以根据loginId现有的 DN 构造 DN,则可以使用ldapTemplate.lookup(String, AttributesMapper)方法来查找单个对象。