3

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

我找到了很多关于解析LDIF 文件的信息,但关于导出到 LDIF 的信息却相对较少。使用 Spring 有一个LdapAttributes类,其toString()方法返回 LDIF 格式的字符串,但我首先看不到从哪里获取LdapAttributes实例。我没有看到任何东西LdapTemplate

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

4

3 回答 3

4

查看类似 unboundid LDAP SDK https://www.unboundid.com/products/ldap-sdk/docs/javadoc/com/unboundid/ldif/package-summary.html

于 2013-02-14T11:18:20.893 回答
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;
    }
}

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

于 2013-02-13T23:42:25.663 回答
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;
}
于 2014-08-14T02:57:19.747 回答