【问题标题】:Get internal attributes with Spring LDAP使用 Spring LDAP 获取内部属性
【发布时间】:2017-07-21 09:59:26
【问题描述】:

我正在使用 Spring LDAP 1.3.0 库通过 Java 访问内部 LDAP 服务器,但我在做一件事时遇到了麻烦:如何获取任何内部属性LDAP的结构?例如,如何获取用户的 memberOf 属性?

我曾经搜索过很多,但没有找到任何关于使用 Spring LDAP 的信息。 任何想法都将受到欢迎。谢谢。

【问题讨论】:

  • 我找到了一个方法,而且很简单。示例:getLdapTemplate().search("dc=MY_COMPANY,dc=com,dc=br", "(&(objectClass=person)(uid=USER_UID))", SearchControls.SUBTREE_SCOPE, new String[]{ "memberOf" }, new UserAttributeMapper() ); 观察:在这段代码中,UserAttributeMapper 只是我自己实现的 org.springframework.ldap.core.AttributesMapper.

标签: java ldap spring-ldap


【解决方案1】:

正如你在评论中所说的 UserAttributeMapper 是你的朋友!

如果用户有多个'memberof':

    static List<List<String>> getPersonGroupsByAccountName(String accountName){

    EqualsFilter filter = new EqualsFilter("sAMAccountName", accountName);
    return ldap.search(DistinguishedName.EMPTY_PATH,filter.encode(),new AttributesMapper(){
        public Object mapFromAttributes(
                javax.naming.directory.Attributes attrs)
        throws javax.naming.NamingException {
            List<String> memberof = new ArrayList();
            for (Enumeration vals = attrs.get("memberOf").getAll(); vals.hasMoreElements();) {
                memberof.add((String)vals.nextElement());
            }
            return memberof;
        }
    });

我确信有更好的方法可以做到这一点,但它确实有效。

【讨论】:

  • 谢谢!在所有帖子的所有搜索结果中,这是唯一对我有用的。 +1。
  • 很高兴对您有所帮助!
【解决方案2】:

我用它来获取像“createTimestamp”或“pwdChangedTime”这样的字段, 和 UserContextMapper 可以参考资源:http://docs.spring.io/spring-ldap/docs/1.3.x-SNAPSHOT/reference/htmlsingle/

ldapTemplate.lookup(dn, new String[] {"*", "+"}, new UserContextMapper());

【讨论】:

    【解决方案3】:

    它也适用于 odmManager。类似的东西

    DistinguishedName dn = new DistinguishedName("The path your are searching in");
    SearchControls searchControls = new SearchControls();
    searchControls.setReturningObjFlag(true);
    searchControls.setReturningAttributes("your attributes, as an array of strings");
    return odmManager.findAll(User.class, dn, searchControls);
    

    我用它来获取像“createTimestamp”这样的字段......

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2016-08-18
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多