2011-06-22 42 views
1

我想从ldap中搜索特定的用户详细信息。所以我写下下面的代码检索用户的详细信息,但它返回用户对象的列表。基本上我只想要人对象不是人物对象列表。为了使用ldap模板来检索我。我如何修改此代码以便返回person对象?如何使用spring在ldap中执行搜索操作

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


} 

回答

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)方法来查找仅一个对象。

+0

谢谢,我会修改代码.. – Raje