Ldap介绍

  • 格式:docx
  • 大小:127.55 KB
  • 文档页数:18

一、Ldap简介

轻型目录访问协议,即Lightweight Directory Access Protocol (LDAP)是一个访问在线目录服务的协议。

目录是一组具有类似属性、以一定逻辑和层次组合的信息。常见的例子是电话簿,由以字母顺序排列的名字、地址和电话号码组成。最新版本的LDAP协议由RFC 4511所定义。

概述

鉴于原先的目录访问协议(Directory Access Protocol即DAP)对于简单的互联网客户端使用太复杂,IETF设计并指定LDAP做为使用X.500目录的更好的途径。LDAP在TCP/IP之上定义了一个相对简单的升级和搜索目录的协议。

常用词"LDAP目录"可能会被误解,而实际并没有"LDAP目录"这么一个目录种类。通常可以用它来描述任何使用LDAP协议访问并能用X.500标识符标识目录中对象的目录。与ISODE提供的X.500协议的网关相比,尽管OpenLDAP及其来自密歇根大学的前身等的目录基本上设计成专门为LDAP访问而优化的, 但也没有比其他用LDAP协议访问的目录额外多出来所谓“LDAP目录”。

协议的第三版由Netscape的Tim Howes,ISODE的Steve Kille和Critical Angle Inc的Mark

Wahl撰写。

二、Ldap内容

LDAP目录的条目(entry)由属性(attribute)的一个聚集组成,并由一个唯一性的名字引用,即专有名称(distinguished name,DN)。例如,DN能取这样的值:“ou=groups,ou=people,dc=wikipedia,dc=org”。

LDAP目录与普通数据库的主要不同之处在于数据的组织方式,它是一种有层次的、树形结构。所有条目的属性的定义是对象类object class的组成部分,并组成在一起构成schema;那些在组织内代表个人的schema被命名为white pages schema。数据库内的每个条目都与若干对象类联系,而这些对象类决定了一个属性是否为可选和它保存哪些类型的信息。属性的名字一般是一个易于记忆的字符串,例如用 cn为通用名(common name)命名,而"mail"代表e-mail地址。属性取值依赖于其类型,并且LDAPv3中一般非二进制值都遵从UTF-8字符串语法。例如,mail属性包含值“user@”;jpegPhotos属性一般包含JPEG/JFIF格式的图片。

LDAP目录条目可描述一个层次机构,这个结构可以反映一个政治、地理或者组织的范畴。在原始的X.500模型中,反应国家的条目位于树的顶端;接着是州或者民族组织。典型的LDAP 配置使用DNS名称作为树形结构的顶端,下列是代表人、文档、组织单元、打印机和其他任何事务的条目。

LDAP影响了后续的Internet协议,包括新版本的X.500、Directory Services Markup

Language (DSML)、Service Provisioning Markup Language (SPML)和Service Location

Protocol.

三、Ldap与其他比较

与数据库比较

虽然目录也被称为特殊的数据库,但它不同于真正的数据库。目录的大部分操作为读操作。假如你的应用程序要写大量的数据,你应该考虑选择使用数据库来实现。目录支持相对简单的事务处理。相反,数据库被设计成处理大量的各种各样的事务处理。假如你的应用要求这种重负荷的事务支持,你该选择数据库而不是目录。

在另一方面,假如你的应用不要求这样的大负荷事务处理,而是偶尔的写一些简单的事务信息。这时,目录是理想的选择。它会更有效,更简单。

与文件系统比较

目录被认为是很差的文件系统。文件通常很大,有几兆甚至更大,虽然目录被优化成存取很小的信息。应用程序以块的方式存取文件。文件系统支持各种调用--像seek(),read()和write(),这样可以写大文件的一部分的信息。目录不能提供这种随机的存取访问。目录条目被分成各种属性。你可以分别获取各种属性。你不能取得一个条目的部分值,如从第几个字节开始。

与web的比较

不象web服务器一样,目录不适合推送JPEG图象或Java程序给客户端。Web服务通常作为开发web应用的跳板。这些平台从CGI(公用网关接口)到更复杂的像Netscape应用服务平台。目录一般不提供这种形式的应用开发,甚至它不提供目录应用开发平台服务。

与FTP比较

与FTP的主要区别在于:数据量的大小和客户的类型。另外一点就是FTP是一个非常简单的协议,它专于做一件事情并把它做好。假如你想做的是把文件从一个地方传送到另一个地方,那么额外的目录下层结构也需要,如复制、查询、更新等。

与DNS比较

因特网的域名系统和目录有相似之处,它们都提供对分层式数据库的访问。但其它一些不同把它们区分开来。DNS的主要目的是把主机名转换成IP地址。比较而言,大多数目录有更普通的作用。DNS有一套专门的、固定的计划,而目录允许被扩展。DNS不允许更新它的信息,而目录可以。DNS可通过UDP的无连接的方式访问,而目录通常是连接访问的。

四、Ldap服务器产品

1、首推iPlanet Directory Server 就是以前的Netscape Directory Server

2、Open Ldap(开放源码)

3、Novell

4、MiscroSoft 的Active Directory也提供LDAPv3接口

5、Domino 也有内部实现

6、IBM Security Directory

五、java操作Ldap

本人知道的Java 操作Ldap有以下几种:JNDI-Ldap(JDK)、JLdap、JDBC-Ldap、LdapSdk、SpringLdap等。

Ldap客户端:ldapbrowser、LDAP Administrator、JXplorer等。

从JDK5.0开始,对LDAP协议的数据访问操作就被集成在javax的扩展API包中,并随同JDK一并发布,这一章节,我们主要介绍API包中的类信息。

javax.naming.directory 包的结构 常用API解析

javax.naming.directory.InitialDirContext,初始化目录服务上下文类

该类是LDAP数据内容的操作工具类,通过该类可以执行绑定LDAP服务器、新增LDAP条目、获取条目实例、修改条目属性、删除条目和根据条件搜索条目等操作。常用方法说明如下:

初始化LDAP 目录服务上下文(相当于使用JDBC打开一个数据库链接)

 InitialDirContext(Hashtable environment)

绑定/创建LDAP条目对象(相当于新增一个LDAP条目数据bind(Name

 name, Object obj, Attributes attrs)

 bind(String name, Object obj, Attributes attrs)

 createSubcontext(Name name, Attributes attrs)

 createSubcontext(String name, Attributes attrs)

获取条目实例(属性集)  getAttributes(Name name)

 getAttributes(Name name, String[] attrIds)

 getAttributes(String name)

 getAttributes(String name, String[] attrIds)

修改条目属性

 modifyAttributes(Name name, int mod_op, Attributes attrs)

 modifyAttributes(Name name, ModificationItem[] mods)

 modifyAttributes(String name, int mod_op, Attributes attrs)

 modifyAttributes(String name, ModificationItem[] mods)

删除条目

 destroySubcontext(Name name)

 destroySubcontext(String name)

根据属性集搜索条目

 search(Name name, Attributes matchingAttributes)

 search(Name name, Attributes matchingAttributes, String[] attributesToReturn)

 search(String name, Attributes matchingAttributes)

 search(String name, Attributes matchingAttributes, String[] attributesToReturn)

根据过滤器搜索条目

 search(Name name, String filterExpr, Object[] filterArgs, SearchControls cons)

 search(Name name, String filter, SearchControls cons)

 search(String name, String filterExpr, Object[] filterArgs, SearchControls cons)

 search(String name, String filter, SearchControls cons)

javax.naming.directory.BasicAttribute,LDAP基本属性对象

该类用来表示LDAP条目中的单个属性对象。在目录服务中,每个属性名称是可以对应多个的属性值的。

构建属性对象

 BasicAttribute(String id)

 BasicAttribute(String id, boolean ordered)

 BasicAttribute(String id, Object value)

 BasicAttribute(String id, Object value, boolean ordered)

添加属性值

 add(int ix, Object attrVal),添加属性值到多值属性的指定位置