Spring Ldap 的增删改查

package ldap.entity;



/**

 * 本测试类person对象来自schema文件的core.schema文件

 * objectClass为person,必填属性和可选属性也是根据该对象得到的。

 * Author:Ding Chengyun

 */

public class Person {



    private String sn; //必填属性

    private String cn; //必填属性

    

    private String userPassword; //可选属性

    private String telephoneNumber; //可选属性

    private String seeAlso; //可选属性

    private String description;  //可选属性

    public String getSn() {

        return sn;

    }

    public void setSn(String sn) {

        this.sn = sn;

    }

    public String getCn() {

        return cn;

    }

    public void setCn(String cn) {

        this.cn = cn;

    }

    public String getUserPassword() {

        return userPassword;

    }

    public void setUserPassword(String userPassword) {

        this.userPassword = userPassword;

    }

    public String getTelephoneNumber() {

        return telephoneNumber;

    }

    public void setTelephoneNumber(String telephoneNumber) {

        this.telephoneNumber = telephoneNumber;

    }

    public String getSeeAlso() {

        return seeAlso;

    }

    public void setSeeAlso(String seeAlso) {

        this.seeAlso = seeAlso;

    }

    public String getDescription() {

        return description;

    }

    public void setDescription(String description) {

        this.description = description;

    }

    

}
Entity 类
 1 package ldap.mapper;

 2 

 3 import javax.naming.NamingException;

 4 import javax.naming.directory.Attributes;

 5 

 6 import ldap.entity.Person;

 7 

 8 import org.springframework.ldap.core.AttributesMapper;

 9 

10 /**

11  * 这个类的作用是将ldap中的属性转化为实体类的属性值,

12  * 在查询信息的时候会用到

13  */

14 public class PersonAttributeMapper implements AttributesMapper{

15 

16     @Override

17     public Object mapFromAttributes(Attributes attr) throws NamingException {

18         Person person = new Person();

19         person.setSn((String)attr.get("sn").get());

20         person.setCn((String)attr.get("cn").get());

21         

22         if (attr.get("userPassword") != null) {

23             person.setUserPassword((String)attr.get("userPassword").get());

24         }

25         if (attr.get("telephoneNumber") != null) {

26             person.setTelephoneNumber((String)attr.get("telephoneNumber").get());

27         }

28         if (attr.get("seeAlso") != null) {

29             person.setSeeAlso((String)attr.get("seeAlso").get());

30         }

31         if (attr.get("description") != null) {

32             person.setDescription((String)attr.get("description").get());

33         }

34         return person;

35     }

36 

37 }
Mapper 类
package ldap.dao;



import java.util.ArrayList;

import java.util.List;



import javax.naming.directory.Attributes;

import javax.naming.directory.BasicAttribute;

import javax.naming.directory.BasicAttributes;

import javax.naming.directory.DirContext;

import javax.naming.directory.ModificationItem;



import ldap.entity.Person;

import ldap.mapper.PersonAttributeMapper;



import org.springframework.ldap.NameNotFoundException;

import org.springframework.ldap.core.DistinguishedName;

import org.springframework.ldap.core.LdapTemplate;

import org.springframework.ldap.filter.AndFilter;

import org.springframework.ldap.filter.EqualsFilter;



import xhrd.ucenter.ldap.entity.UcenterLdapApplication;

import xhrd.ucenter.ldap.ldapAttributeMappper.ApplicationAttributeMapper;



/**

 * Description: 此类的作用是使用spring的 LdapTemplate完成对ldap的增删改查的操作

 * Author:Ding Chengyun

 */

public class PersonDao {



    //注入spring的LdapTemplate,此处在spring的配置文件中需要配置

    private LdapTemplate ldapTemplate;



    public LdapTemplate getLdapTemplate() {

        return ldapTemplate;

    }

    public void setLdapTemplate(LdapTemplate ldapTemplate) {

        this.ldapTemplate = ldapTemplate;

    }

    

    /**

     * 添加 一条记录

     * @param person

     */

    public void createOnePerson(Person person) {

        BasicAttribute ba = new BasicAttribute("objectclass");

        ba.add("person"); //此处的person对应的是core.schema文件中的objectClass:person

        Attributes attr = new BasicAttributes();

        attr.put(ba);

        //必填属性,不能为null也不能为空字符串

        attr.put("cn", person.getCn());

        attr.put("sn", person.getSn());



        //可选字段需要判断是否为空,如果为空则不能添加

        if (person.getDescription() != null

                && person.getDescription().length() > 0) {

            attr.put("description", person.getDescription());

        }



        if (person.getUserPassword() != null

                && person.getUserPassword().length() > 0) {

            attr.put("userPassword", person.getUserPassword());

        }

        if (person.getSeeAlso() != null

                && person.getSeeAlso().length() > 0) {

            attr.put("seeAlso", person.getSeeAlso());

        }

        if (person.getTelephoneNumber() != null 

                && person.getTelephoneNumber().length() > 0) {

            attr.put("telephoneNumber", person.getTelephoneNumber());

        }

        

        //bind方法即是添加一条记录。

        ldapTemplate.bind(getDn(person.getCn()), null, attr);

    }



    /**

    

    /**

     * 根据dn查询详细信息

     * @param cn

     * @return

     */

    public UcenterLdapApplication getPersonDetail(String cn) {

        try {

            //ldapTeplate的lookup方法是根据dn进行查询,此查询的效率超高

            UcenterLdapApplication ua = (UcenterLdapApplication) 

                ldapTemplate.lookup(getDn(cn),

                        new ApplicationAttributeMapper());

            return ua;

        } catch (NameNotFoundException e) {

            return null;

        }

    }



    /**

     * 根据自定义的属性值查询person列表

     * @param person

     * @return

     */

    public List<Person> getPersonList(

            Person person) {

        List<Person> list = new ArrayList<Person>();

        //查询过滤条件

        AndFilter andFilter = new AndFilter();

        andFilter.and(new EqualsFilter("objectclass", "person"));

        

        

        if (person.getCn() != null

                && person.getCn().length() > 0) {

            andFilter.and(new EqualsFilter("cn", person.getCn()));

        }

        if (person.getSn() != null

                && person.getSn().length() > 0) {

            andFilter.and(new EqualsFilter("sn", person.getSn()));

        }



        if (person.getDescription() != null

                && person.getDescription().length() > 0) {

            andFilter.and(new EqualsFilter("description", person.getDescription()));

        }



        if (person.getUserPassword() != null

                && person.getUserPassword().length() > 0) {

            andFilter.and(new EqualsFilter("userPassword", person.getUserPassword()));

        }

        if (person.getSeeAlso() != null

                && person.getSeeAlso().length() > 0) {

            andFilter.and(new EqualsFilter("seeAlso", person.getSeeAlso()));

        }

        if (person.getTelephoneNumber() != null 

                && person.getTelephoneNumber().length() > 0) {

            andFilter.and(new EqualsFilter("telephoneNumber", person.getTelephoneNumber()));

        }

        //search是根据过滤条件进行查询,第一个参数是父节点的dn,可以为空,不为空时查询效率更高

        list = ldapTemplate.search("", andFilter.encode(),

                new PersonAttributeMapper());

        return list;

    }



    /**

     * 删除一条记录,根据dn

     * @param cn

     */

    public void removeOnePerson(String cn) {

        ldapTemplate.unbind(getDn(cn));

    }



    /**

     * 修改操作

     * @param person

     */

    public void updateOnePerson(Person person) {

        if (person == null || person.getCn() == null 

                || person.getCn().length() <= 0) {

            return;

        }

        List<ModificationItem> mList = new ArrayList<ModificationItem>();

        

        mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,

                new BasicAttribute("sn",person.getSn())));

        mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,

                new BasicAttribute("description",person.getDescription())));

        mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,

                new BasicAttribute("seeAlso",person.getSeeAlso())));

        mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,

                new BasicAttribute("telephoneNumber",person.getTelephoneNumber())));

        mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,

                new BasicAttribute("userPassword",person.getUserPassword())));

        

        if (mList.size() > 0) {

            ModificationItem[] mArray = new ModificationItem[mList.size()];

            for (int i = 0; i < mList.size(); i++) {

                mArray[i] = mList.get(i);

            }

            //modifyAttributes 方法是修改对象的操作,与rebind()方法需要区别开

            ldapTemplate.modifyAttributes(this.getDn(person.getCn()), mArray);

        }

    }

    /**

     * 得到dn

     * @param cn

     * @return

     */

    private DistinguishedName getDn(String cn) {

        //得到根目录,也就是配置文件中配置的ldap的根目录

        DistinguishedName newContactDN = new DistinguishedName();

        // 添加cn,即使得该条记录的dn为"cn=cn,根目录",例如"cn=abc,dc=testdc,dc=com"

        newContactDN.add("cn", cn);

        return newContactDN;

    }

}
DAO 层

 

你可能感兴趣的:(spring)