这篇博客本打算要在这周五或者周六来写的,因为我想写的尽量详细一点,但是每天接触的东西太多了,有些感悟怕时间长了忘记了,所以提前写这篇了。
本人之前没有接触过LDAP,这段时间被LDAP折腾的够闹心的,看了几天项目中的LDAP操作的代码后还是有很多地方不明白,尤其是一些高级查询,到现在为止我也仅仅会一点增加和查询,删除和修改还没有多做练习,后续文章会继续完善这篇教程。
这篇文章适合的读者:有一定java开发经验,很少接触过LDAP的程序员。如果你是LDAP高手请多指教,本文所有内容系本人自己摸索所得。
LDAP搭建请参见我另一篇文章,这里不再多说。
环境:openLDAP-2.2.29
数据库:bdb-4.3.29
openssl版本:openssl-0.9.8
jdk:1.7.*
LDAP查看工具:LdapBrowser282
上述所有附件在文章末尾会有对应下载链接。
所用到的JAR包(我也将jar包附带上传了):
可以看到有一个poi的jar包,因为后面我会介绍怎样通过POI将Excel中的数据导入LDAP,并且将对应的节点关系建立起来,每个人都可以到自己的节点下。如下图所示:
好的,那么从这里开始,一步一步往下走了。
首先在MyEclipse中建立一个web项目,事实上我们并不会将这个项目部署到tomcat上去,这样做一是为了有时候需要WEB测试一下,就不用重新再创建项目了,二来,将jar包复制到WEB-INF下的lib目录下后,MyEclipse会自动Build Path。建立好项目并且将jar包复制到lib目录下之后,我们继续下一步。
接下来在src下新建这样三个包
至于为什么写ou和cn这个暂时先不管,先这样写,通过这篇教程的练习你大概会有所了解的。
接下来在com.study.ou下新建一个xml文件,命名为:ldap-ou.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="url" value="ldap://192.168.0.109:389"/> <property name="base" value="dc=itrus,dc=com,dc=cn"/> <property name="userDn" value="cn=Manager,dc=itrus,dc=com,dc=cn" /> <property name="password" value="secret"/> </bean> <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"> <constructor-arg ref="contextSource"/> </bean> <bean id="ldapContext" class="com.study.dao.impl.OuDAOImpl"> <property name="ldapTemplate" ref="ldapTemplate"/> </bean> </beans>
然后在com.study.dao下定义一个接口,命名为OuDAO.java ,内容如下:
package com.study.dao; import java.util.Map; public interface OuDAO { /** * 根据DN值插入单位 * @param map * @param supDn */ public void insertOu(Map<String,String> map,String supDn); }
在com.study.dao.impl下对上面的接口进行实现;
package com.study.dao.impl; import java.util.Map; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import org.springframework.ldap.core.DistinguishedName; import org.springframework.ldap.core.LdapTemplate; import com.study.dao.OuDAO; public class OuDAOImpl implements OuDAO { LdapTemplate ldapTemplate; public void setLdapTemplate(LdapTemplate ldapTemplate){ this.ldapTemplate=ldapTemplate; } @Override public void insertOu(Map<String, String> map, String supDn) { Attributes ouAttributes=new BasicAttributes(); BasicAttribute ouBasicAttribute=new BasicAttribute("objectclass"); ouBasicAttribute.add("organizationalUnit"); ouAttributes.put(ouBasicAttribute); for(String str:map.keySet()){ ouAttributes.put(str,map.get(str)); } DistinguishedName newContactDN=new DistinguishedName(supDn); newContactDN.add("ou",map.get("ou")); ldapTemplate.bind(newContactDN,null,ouAttributes); } }
没关系,先不用管太多,后面我会仔细介绍整个过程的,主要是要多LDAP了解.
下面写一个测试方法来执行添加部门操作,在com.study.ou下新建EngerOu.java
package com.study.ou; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import com.study.dao.OuDAO; @SuppressWarnings("deprecation") public class EngerOu { public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); map.put("deptCode", "a01"); map.put("ou", "软件部"); map.put("description", "这是一个部门节点"); map.put("state", "正常"); new EngerOu().testMethod(map, ""); } public void testMethod(Map<String,String> map,String supDn){ Resource resource=new ClassPathResource("com/study/ou/ldap-ou.xml"); BeanFactory factory=new XmlBeanFactory(resource); OuDAO ldapContact=(OuDAO) factory.getBean("ldapContext"); ldapContact.insertOu(map, supDn); } }
在我们执行前我先将以前的ldap清空:
可以看到已经是清空的了,下面执行代码
解果如下图:
到这里,一个部门成功导入。
如果你之前没有接触过LDAP的话可能你照着我的例子去做会失败,不过这个也正常,这篇文章就先暂时介绍简单的这些操作,下一篇文章我将完整写出我这篇文章里面所用到的几个关键知识点,懂LDAP的人都知道LDAP有自己的数据库,有自己的安全机制,有自己的数据类型以及约束,所以我在下一篇文章中会详细说明跟这篇文章中有关的一些知识点,帮助你解决问题,包括从文件导入组织机构和人员信息,查询的话看我这几天的情况,好的话也会说一些高级查询方面的。
顺便我重新再安装一个虚拟机,在写下一篇文章的时候我也边做边写,如果你也使用虚拟机的话建议使用windows server 2003 Enterprise Edition版本的系统。XP系统有可能会有问题。
===========================
PS:
1、对于没有接触过LDAP的可以按照我文章说的自己体验一下。
2、大神请飘过,这个过于简单了,但是对于自学者的话我觉得很适合。
3、我自己就是一个愚钝的自学者,所以........文章才会这么写。
4、附件:
openLDAP-2.2.29----
数据库:bdb-4.3.29
openssl版本:openssl-0.9.8
我的这一个安装包里就附带了LDAP---BDB---OPENSSL,所以这三个软件就一个安装包,三合一;
下载地址:http://pan.baidu.com/s/1bnotVOF
顺便附带安装说明一份: http://pan.baidu.com/s/1i3ichG5
LDAP查看工具:LdapBrowser282------下载地址:http://pan.baidu.com/s/1i37e9oD
所用到的jar包:http://pan.baidu.com/s/1emDNg
以上超链接复制后打开即可下载。