2013-02-13 91 views
3

我想使用Spring將ActiveDirectory記錄導出爲LDIF格式的文件。我如何獲得LdapAttributes

我找到很多關於解析 LDIF文件的信息,但是對於輸出到LDIF文件卻相對較少。在Spring中,有一個LdapAttributes類,它的toString()方法返回一個LDIF格式的字符串,但我沒有看到從哪裏得到LdapAttributes實例。我在LdapTemplate上看不到任何東西。

希望框架提供了一個簡單的方法來獲得這個,而不是我必須自己構建LdapAttributes對象。

回答

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; 
    } 
} 

我不禁覺得必須有一些多出來的最現成的方法來做到這一點,雖然上述作品。

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; 
}