你好,欢迎访问我的博客!登录
当前位置:首页 - LDAP - 正文 求知成瘾,却无作品!

spring ldap简单的例子(一)

2016-04-25LDAP攻城狮3098°c
A+ A-

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

本人之前没有接触过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包附带上传了):

19231311-fb68edf00a434ac2a6f58317703f9078.jpg

可以看到有一个poi的jar包,因为后面我会介绍怎样通过POI将Excel中的数据导入LDAP,并且将对应的节点关系建立起来,每个人都可以到自己的节点下。如下图所示:

19232840-8f3776b713fc4695ba7b53290b2dcbc7.jpg


好的,那么从这里开始,一步一步往下走了。

  首先在MyEclipse中建立一个web项目,事实上我们并不会将这个项目部署到tomcat上去,这样做一是为了有时候需要WEB测试一下,就不用重新再创建项目了,二来,将jar包复制到WEB-INF下的lib目录下后,MyEclipse会自动Build Path。建立好项目并且将jar包复制到lib目录下之后,我们继续下一步。

  接下来在src下新建这样三个包

19234251-5ee6987eff0444d69390fa880ff9637c.jpg


至于为什么写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 newCon\=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 ldapCon\=(OuDAO) factory.getBean("ldapContext");
        ldapContact.insertOu(map, supDn);
    }
}

在我们执行前我先将以前的ldap清空:

20000954-8161f34c35bd47ba90a34b27850ae961.jpg

可以看到已经是清空的了,下面执行代码,执行结果如下图所示:

20001117-67c0b3a8fb454ef49e28872718287d21.jpg

到这里,一个部门成功导入。

 

如果你之前没有接触过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

 

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



未定义标签

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。


  登录