spring ldap简单的例子(一)

摘要:
LDAP搭建请参见我另一篇文章,这里不再多说。环境:openLDAP-2.2.29数据库:bdb-4.3.29openssl版本:openssl-0.9.8jdk:1.7.*LDAP查看工具:LdapBrowser282上述所有附件在文章末尾会有对应下载链接。首先在MyEclipse中建立一个web项目,事实上我们并不会将这个项目部署到tomcat上去,这样做一是为了有时候需要WEB测试一下,就不用重新再创建项目了,二来,将jar包复制到WEB-INF下的lib目录下后,MyEclipse会自动BuildPath。建立好项目并且将jar包复制到lib目录下之后,我们继续下一步。接下来在com.study.ou下新建一个xml文件,命名为:ldap-ou.xml内容如下:˂?

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

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

spring ldap简单的例子(一)第1张

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

spring ldap简单的例子(一)第2张

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

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

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

spring ldap简单的例子(一)第3张

至于为什么写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   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   class="org.springframework.ldap.core.LdapTemplate">
		<constructor-arg ref="contextSource"/>
	</bean>
	<bean   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

packagecom.study.ou;
importjava.util.HashMap;
importjava.util.Map;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.core.io.ClassPathResource;
importorg.springframework.core.io.Resource;
importcom.study.dao.OuDAO;
@SuppressWarnings("deprecation")
public classEngerOu {
    public static voidmain(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=newXmlBeanFactory(resource);
        OuDAO ldapContact=(OuDAO) factory.getBean("ldapContext");
        ldapContact.insertOu(map, supDn);
    }
}

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

spring ldap简单的例子(一)第4张

可以看到已经是清空的了,下面执行代码

解果如下图:spring ldap简单的例子(一)第5张

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

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

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

免责声明:文章转载自《spring ldap简单的例子(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mui日期设置与时钟样式时间设置【非长篇大论】X3D Web3D标准的发展下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用 Spring Security 保护 Web 应用的安全

安全一直是 Web 应用开发中非常重要的一个方面。从安全的角度来说,需要考虑用户认证和授权两个方面。为 Web 应用增加安全方面的能力并非一件简单的事情,需要考虑不同的认证和授权机制。Spring Security 为使用 Spring 框架的 Web 应用提供了良好的支持。本文将详细介绍如何使用 Spring Security 框架为 Web 应用提供安...

Redmine集成LDAP认证

用admin,admin登录到redmine,改环境为中文,然后到ldap认证里,添加一个ldap配置 Name = My Directory Host = host.domain.org Port = 389 LDAPS = no Account = MyDomain\UserName (or UserName@MyDomain depending on...

Jenkins 实现 ldap认证

使用自己搭建的openldap: 使用Test LdapSetting测试的结果: 所测试的用户在:svn,jenkins,gitlab,sonarqube,wpsadmin组下 若用户不在jenkins组下,但密码正确,返回结果: 若用户在jenkins组下,但是密码不正确,返回结果: 使用用户中心提供的ldap,支持匿名访问 filter 过滤语法...

【指导】SonarQube 部署说明

转载:https://blog.csdn.net/cuiaamay/article/details/52057091 1,安装 1.1 安装依赖 需要保证Oracle JRE 8 及以上,或者 OpenJDK 8及以上(如下安装 openjdk): # add-apt-repository ppa:openjdk-r/ppa # apt-get upd...

ldap 导出、导入ldif数据

ldap 导出、导入ldif数据有如下方式: 1.dsadm(速度快,需要停止ldap实例) 2.dsconf(速度慢,需要保持ldap实例开启) windows导出、导入需要加上参数--unsecured 导出ldap数据--------- dsee7indsconf.exe export --unsecured D:NetAuthsoftbak2017...

AD与LDAP区别

LDAP是轻量目录访问协议(LightweightDirectory Access Protocol)的缩写, LDAP标准实际上是在X.500标准基础上产生的一个简化版本 AD是ActiveDirectory的缩写,AD应该是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据...