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),添加属性值到多值属性的指定位置