gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:05:43 26 4
gpt4 key购买 nike

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

这是 ldap 查询:

ldapsearch -h [server_name] -p [port] -s sub -b "ou=people,ou=foo,o=bar,c=com" "(id=123)"

结果如何:

id: 123

name: John

firstname: 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,但没有成功。

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

我只得到第一组:

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

预先感谢您的支持!

最佳答案

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

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

因此,我得到了组中分离成员的列表。

关于java - Spring LdapTemplate - 如何读取具有相同属性名称的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com