原创

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),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信