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);//查询 ,其他方式相似测试已省略 } }