原创

Spring-ldap针对LDAP操作的封装工具

        LDAP全称是Lightweight Directory Access Protocol,LDAP是一个目录服务器,在客户端可以使用同样的协议、客户端连接软件包以及查询命令与LDAP服务器进行交互LDAP目录是树形结构,目录有条目组成。条目是具有区别名DN(Distinguished Name)的属性(Attribute)集合,条目相当于关系型数据库中的表,DN相当于表中的关键字(Primary Key),属性由类型(Type)和多个值(Values)组成。


        下面为本站素文宅www.yoodb.com大家分享一下如何使用Spring-LDAP进行封装对LDAP的操作,下载1.3.1版本,其中所需jar包包含有:spring-ldap-core-1.3.1.RELEASE.jar,spring-ldap-core-tiger-1.3.1.RELEASE.jar,commons-lang-2.5.jar,commons-logging-1.1.jar,log4j-1.2.15.jar以及Spring相关jar包等。


配置LDAP数据源和LdapTemplate以及所需使用的bean,applicationContext.xml文件具体配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:sec="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
    <!-- 配置数据源 -->
    <bean id="contextSource" 
        class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="url" value="ldap://127.0.0.1:1389" />
        <property name="base" value="dc=users,dc=CMP" />
        <property name="userDn" value="cn=manager" />
        <property name="password" value="12345678" />
    </bean>
 
    <!-- 配置LdapTemplate -->
    <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
        <constructor-arg ref="contextSource" />
    </bean>
 
    <!-- 配置实体类 -->
    <bean id="userDao" class="com.yoodb.dao.UserDao">
        <property name="ldapTemplate" ref="ldapTemplate" />
    </bean>
</beans>


为了方便数据传递新建实体对象User类,具体代码如下:

package com.yoodb.util;
    public class User {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }
}


为了方便操作LDAP对LdapTemplate对象进行了封装,具体代码如下:

package com.yoodb.dao;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jasig.services.persondir.IPersonAttributes;
import org.jasig.services.persondir.support.AttributeNamedPersonImpl;
import org.jasig.services.persondir.support.StubPersonAttributeDao;
import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.LdapTemplate;
public class UserDao {
protected final Log logger = LogFactory.getLog(getClass());
private LdapTemplate ldapTemplate;
public LdapTemplate getLdapTemplate() {
return ldapTemplate;
}
public void setLdapTemplate(LdapTemplate ldapTemplate) {
this.ldapTemplate = ldapTemplate;
}
/**
 * 查询
 * @param rdn
 * @return
 */
public User find(String rdn) {
        return (User)this.ldapTemplate.lookup(rdn, new AttributesMapper(){
            public Object mapFromAttributes(Attributes attributes)
                    throws NamingException {
                User user = new User();
                if(attributes!=null){
                    Attribute idAttr = attributes.get("uid");
                    if(idAttr!=null){
                        user.setId((String)idAttr.get());
                    }
                    Attribute nameAttr = attributes.get("sn");
                    if(nameAttr!=null){
                        user.setName((String)nameAttr.get());
                    }
                }
                return user;
            }
        });
    }
/**
 * 增加
 * @param rdn
 * @param user
 */
public void add(String rdn,User user){
        Attributes attrs = new BasicAttributes();
        Attribute ocAttr = new BasicAttribute("objectClass");
        ocAttr.add("top");
        ocAttr.add("organizationalUnit");
        attrs.put(ocAttr);
        Attribute snAttr = new BasicAttribute("sn");
        snAttr.add(user.getName());
        attrs.put(snAttr);
        this.ldapTemplate.bind(rdn, null, attrs);
    }
 /**
 * 删除
 * @param rdn
 */
    public void delete(String rdn){
        this.ldapTemplate.unbind(rdn);
    }
 
/**
     * 修改RDN
     * @param oldRDN
     * @param newRDN
     */
    public void modifyRDN(String oldRDN,String newRDN){
        this.ldapTemplate.rename(oldRDN, newRDN);
    }
 
/**
 * 修改
 * @param rdn
 * @param user
 */
    public void modfiyAttrs(String rdn,User user){
        Attribute attr = new BasicAttribute("sn");
        attr.add(user.getName());
        ModificationItem item = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
        this.ldapTemplate.modifyAttributes(rdn, new ModificationItem[]{item});
}

@SuppressWarnings("unchecked")
public List<User> search(String rdn,String fileter) {
        return this.ldapTemplate.search(rdn, fileter, 
                new AttributesMapper(){
                    public Object mapFromAttributes(Attributes attributes)
                            throws NamingException {
                        User user = new User();
                        if(attributes!=null){
                            Attribute idAttr = attributes.get("uid");
                            if(idAttr!=null){
                                user.setId((String)idAttr.get());
                            }
                            Attribute nameAttr = attributes.get("sn");
                            if(nameAttr!=null){
                                user.setName((String)nameAttr.get());
                            }
                        }
                        return user;
                    }
   
                });
        }
}


简单测试,具体代码如下:

package com.yoodb.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class LDAPTest {
/**
 * @param args
 */
   public static void main(String[] args) {
       ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao userDao=(UserDao)ac.getBean("userDao");
       String rdn = String.format("uid=%s",uid);
       User userDao = find(rdn);//查询  ,其他方式相似测试已省略
   }
}

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信