zoukankan      html  css  js  c++  java
  • 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 层
  • 相关阅读:
    java中判断图片格式并且等比例压缩图片
    如何将freemarker文件转化为html文件
    细数用anaconda安装mayavi时出现的各种问题
    利用java代码生成keyStore
    时间戳获取 天/月/日等until
    navicat连接msql Client does not support authentication protocol requested by server; consider upgrading MySQL client
    类初始化和构造器初始化的区别
    git从自己账号切换到公司的账号,剪项目失败
    求吸血鬼数(1000~10000,thinking)
    vue。js的时间的格式化
  • 原文地址:https://www.cnblogs.com/mengzw/p/3640276.html
Copyright © 2011-2022 走看看