获取用户组

时间:2017-07-17 16:19:14

标签: spring spring-boot ldap openldap

我使用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目录的屏幕截图:

enter image description here

祝你好运

1 个答案:

答案 0 :(得分:1)

这取决于几件事:

  1. 如果您已配置memberof叠加,则 {{1>后将用户添加到组中}}已配置,memberof将起作用。如果没有,那么其中一个条件就不对了。特别是,memberOf不是追溯性的。

  2. 如果这些条件没有或不能成立,则需要使用memberof之类的过滤器从groups子树开始进行子树搜索,其中提供参数作为用户的DN。