【问题标题】:ldap find object by group memberldap 按组成员查找对象
【发布时间】:2016-04-12 06:59:14
【问题描述】:

我正在使用 spring ldaptemplate。我正在尝试从我的小组中加入角色。架构如下。

ou=roles,cn=admin
member cn=key1,ou=Keys
member cn=key2,ou=keys

ou=roles,cn=user
member cn=key3,ou=Keys
member cn=key2,ou=keys

我想找出成员 cn=key2 的角色。

我的查询是

ldapTemplate.search(
            query().where("objectclass").is("groupOfNames").and("ou")
                        .is(roles).and("cn").is("key2"), PERSON_CONTEXT_MAPPER);

我在哪里失踪?他们是否可以使用 ldaptemplate 替代。

【问题讨论】:

    标签: spring ldap openldap spring-ldap


    【解决方案1】:
        List<String> list = ldapTemplate.list("ou=groups,dc=xyz,dc=com");
        Set<String> ldapGroupNames = list.stream()
           .map(group -> group.split("=")[1])
           .collect(Collectors.toSet());
    
        log.info("ldap Group Names:{}",ldapGroupNames);
    

    【讨论】:

      【解决方案2】:

      LDAP 搜索过滤属性值,因此您的搜索需要匹配成员属性:

      ldapTemplate.search(
          query().
              where("objectclass").is("groupOfNames").
              and("member").is("cn=key2,ou=keys"), PERSON_CONTEXT_MAPPER);
      

      请注意,在上述情况下,您需要提供您要查找的用户的完整 DN。过滤器将匹配指定 DN 作为成员存在的所有 groupOfName 条目。

      另外,请注意,您永远不应该手动构建专有名称字符串,因为转义规则等很棘手。要构建要包含在成员属性匹配中的用户 DN,请查看 LdapNameBuilder

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        • 2012-04-06
        相关资源
        最近更新 更多