zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    调用Win32 API netapi32.dll 实现UNC(网络共享)连接的管理(一)
    一个重写Page基类的例子
    36进制进位算法例子
    关于.net 中调用script的alert后 css失效的办法
    Javascript:keyCode键码值表
    Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
    在.NET程序中正确使用String类型
    Sql Server中自动序号的方法
    托管和非托管的关系和区别
    Oracle 格式化
  • 原文地址:https://www.cnblogs.com/ssh2/p/3483031.html
Copyright © 2011-2022 走看看