Spring LdapTemplate - 如何读取具有相同属性名称的值

时间:2016-12-23 13:32:29

标签: java spring ldap

我想阅读用户的所有群组并将其放入列表中。

这是ldap查询:

  

ldapsearch -h [server_name] -p [port] -s sub -b   " OU =人,OU = FOO,O =酒吧中,c = COM" "(ID = 123)"

结果如何:

  

id:123

     

姓名:John

     

名字:BAKER

     

grouplist:cn = GROUP1.COM,cn = GROUPS,ou = FOO,o = BAR,c = COM

     

grouplist:cn = GROUP2.COM,cn = GROUPS,ou = FOO,o = BAR,c = COM

我使用Spring的LdapTemplate实现。它运行正常,但是如果它们具有多个具有相同名称的属性,我该如何处理结果(参见上面的' grouplist')?我尝试使用IncrementalAttributesMapper,但我没有让它工作。

on update CURRENT_TIMESTAMP

当我尝试按如下方式阅读属性时:

public MyUser getUser(String userId) {
   LdapQuery searchQuery = LdapQueryBuilder.query()
                .base("ou=people,ou=foo,o=bar,c=com")
                .searchScope(SearchScope.SUBTREE)
                .filter(new EqualsFilter("id", userId));

   return ldapTemplate.search(searchQuery, getUserAttributesMapper());
}

public static AttributesMapper getUserAttributesMapper() {
        return attributes -> {

            IncrementalAttributesMapper groupAttributesMapper = new DefaultIncrementalAttributesMapper("grouplist");

            MyUser myUser = MyUser.builder()
                 .id(attributes.get("id").get().toString())
                 .name(attributes.get("name").get().toString())
                 .firstname(attributes.get("firstname").get().toString())
                 .groupIds(groupAttributesMapper.getValues("cn"))
                 .build();

            return myUser;
        };
    }

我只得到第一组:

  

grouplist:cn = GROUP1.COM,cn = GROUPS,ou = FOO,o = BAR,c = COM

提前感谢您的支持!

1 个答案:

答案 0 :(得分:1)

我使用此代码解决了类似的问题:

List values = DefaultIncrementalAttributesMapper.lookupAttributeValues(ldapTemplate, baseDN, "member");

在那种情况下,我有一个包含几个成员的小组。像这样:

member: CN=Name1,OU=Users,DC=bar,DC=foo,DC=com
member: CN=Name2,OU=Users,DC=bar,DC=foo,DC=com
member: CN=Name3,OU=Users,DC=bar,DC=foo,DC=com

结果我得到了一组分开的小组成员。