【问题标题】:Spring LdapTemplate - How do read values with same attribute nameSpring LdapTemplate - 如何读取具有相同属性名称的值
【发布时间】:2017-03-29 13:15:20
【问题描述】:

我想读取一个用户的所有组并将它们放入一个列表中。

这是 ldap 查询:

ldapsearch -h [服务器名称] -p [端口] -s sub -b "ou=people,ou=foo,o=bar,c=com" "(id=123)"

结果如何:

id:123

姓名:约翰

名字:贝克

组列表:cn=GROUP1.COM,cn=GROUPS,ou=FOO,o=BAR,c=COM

组列表:cn=GROUP2.COM,cn=GROUPS,ou=FOO,o=BAR,c=COM

我使用 Spring 的 LdapTemplate 实现。它工作正常,但是当它们具有多个同名属性时如何处理结果(参见上面的“组列表”)?我尝试使用 IncrementalAttributesMapper,但我没有让它工作。

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

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

attributes.get("grouplist").get().toString()

我只得到第一组:

组列表:cn=GROUP1.COM,cn=GROUPS,ou=FOO,o=BAR,c=COM

提前感谢您的支持!

【问题讨论】:

  • attributes.get("group list") 返回一个可以迭代的集合。

标签: java spring ldap


【解决方案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

因此,我得到了一个分开的组成员列表。

【讨论】:

  • 这很有帮助,而且是我见过的不同解决方案。谢谢 foxygun。
  • 您能否详细说明一下。 DefaultIncrementalAttributesMapper 如何与 ldapsearch 一起使用?
猜你喜欢
  • 2019-09-09
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多