我如何获得LdapAttributes

时间:2013-02-13 22:09:11

标签: java spring ldap spring-ldap ldif

我正在尝试使用Spring将ActiveDirectory记录导出为LDIF格式的文件。

我找到了很多关于解析 LDIF文件的信息,但是关于导出到LDIF的信息相对较少。在Spring中有一个LdapAttributes类,其toString()方法返回LDIF格式的字符串,但我不知道从哪里获取LdapAttributes实例。我在LdapTemplate上看不到任何内容。

希望框架提供了一种简单的方法,而不是我自己必须构建LdapAttributes对象。

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

嗯,我想出了这个:

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;    
import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.core.LdapAttributes;

public class PersonMapper implements AttributesMapper {

    @Override
    public Object mapFromAttributes(Attributes attrs) throws NamingException {
        String dnValue = (String) attrs.get("distinguishedName").get();
        DistinguishedName dn = new DistinguishedName(dnValue);
        LdapAttributes ldapAttrs = new LdapAttributes(dn);
        for (NamingEnumeration<? extends Attribute> ne = attrs.getAll(); ne.hasMore(); ) {
            ldapAttrs.put(ne.next());
        }
        return ldapAttrs;
    }
}

我不禁觉得必须有一些更开箱即用的方法来做到这一点,尽管如上所述。

答案 2 :(得分:0)

LdapAttributes ldapAttributes = basic2LdapAttributes(result.getNameInNamespace(), result.getAttributes());

public static LdapAttributes basic2LdapAttributes(String distinguishedName, Attributes attributes) throws NamingException{
        LdapAttributes ldapAttributes = new LdapAttributes();
        ldapAttributes.setName(LdapUtils.newLdapName(distinguishedName));
        for (NamingEnumeration<? extends Attribute> nameEnumeration = attributes.getAll(); nameEnumeration.hasMore();) {
            ldapAttributes.put(nameEnumeration.next());
        }
        return ldapAttributes;
}