我使用spring-boot开发应用程序。我使用Ldaptemplate API与Ldap存储库进行通信。我需要检索用户详细信息和包含的组(membreOf)。这是我的代码片段:
public Person findCustomerByUid(String uid, String orgUnit) throws InvalidNameException {
Person p = new Person();
p.setUid(uid);
p.setOu(orgUnit);
Name dn = buildDn(p);
return (Person) ldapTemplate.lookup(dn, new PersonContextMapper());
}
private static class PersonContextMapper implements ContextMapper<Object> {
public Object mapFromContext(Object ctx) {
DirContextAdapter context = (DirContextAdapter) ctx;
Person p = new Person();
p.setFirstName(context.getStringAttribute("cn"));
p.setLastName(context.getStringAttribute("sn"));
p.setOu(context.getStringAttribute("ou"));
p.setEmail(context.getStringAttribute("mail"));
p.setUid(context.getStringAttribute("uid"));
p.setIdEventuate(context.getStringAttribute("title"));
// p.setLstRoles(context.getStringAttributes("roleNames")); // Doesn't work
return p;
}
}
此工作但角色列表始终为null。 我试过这个但没有成功:
Object[] o1 = context.getObjectAttributes("memberOf"); // doesn't work
你有什么想法吗?
这是用户使用Apache目录的屏幕截图:
祝你好运
答案 0 :(得分:1)
这取决于几件事:
如果您已配置memberof
叠加和,则 {{1>后将用户添加到组中}}已配置,memberof
将起作用。如果没有,那么其中一个条件就不对了。特别是,memberOf
不是追溯性的。
如果这些条件没有或不能成立,则需要使用memberof
之类的过滤器从groups
子树开始进行子树搜索,其中提供参数作为用户的DN。