【发布时间】: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")返回一个可以迭代的集合。