spring ldap简单的例子(一)

这篇博客本打算要在这周五或者周六来写的,因为我想写的尽量详细一点,但是每天接触的东西太多了,有些感悟怕时间长了忘记了,所以提前写这篇了。

本人之前没有接触过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

 

以上超链接复制后打开即可下载。

 

posted on 2013-12-20 00:31  下一行code  阅读(2391)  评论(0编辑  收藏  举报

导航