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

标签 java ldap spring-ldap

我想从 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/

相关文章:

java - Spring Security 工作时 Spring LdapRepository 不返回结果

java - 替换java中字符串中第一次出现的两个星号

java - 如何优化这个更新 SQL 查询

java - 从 Angular Js(Java Web)调用 API 时出现 CORS 错误

java - 添加使用到 ldap 时出错 [LDAP : error code 17 - javaSerializedData: attribute type undefined]

java - Spring 启动测试 : @TestPropertySource not overriding @EnableAutoConfiguration

java - 如何使用 APACHE POI 或 Else 将 MS PowerPoint 2003/2007 转换为 HTML?

linux - 当上下文名称中有 '#' 符号时,ldap_explode_dn() 中的问题

ssl - 在 SSL 模式下使用 jndi 连接 LDAP,如何在 java 代码中编写客户端证书?

java - 使用 Java 配置的 Spring LDAP