《LDAP材料整理.ppt》由会员分享,可在线阅读,更多相关《LDAP材料整理.ppt(33页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、目录目录1.LDAP介绍2.LDAP相关概念3.LDAP使用4.示例演示LDAPLDAP简介简介LDAP是Light Directory Access Portocol的缩写,轻量级目录访问协议目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它成树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。目录服务是由目录数据库和一套访问协议组成的系统 LDAPLDAP简介简介-协议协议从协议衍化上阐述LDAP,它是“目录
2、访问协议DAPISO X.500”的衍生,简化了DAP协议,提供了轻量级的基于TCP/IP协议的网络访问,降低了管理维护成本,但保持了强壮且易于扩充的信息框架。LDAP的应用程序可以很轻松的新增、修改、查询和删除目录内容信息。LDAPLDAP简介简介-用途用途从用途上阐述LDAP,它是一个存储静态相关信息的服务,适合“一次记录多次读取”公司的物理设备信息如打印机,它的IP地址、存放位置、厂商、购买时间等 公开的员工信息地址、电话、电子邮件合同和账号信息客户信息、产品交付日期、投标信息、项目信息 凭证信息认证凭证、许可证凭证LDAPLDAP简介简介-数据结构数据结构从数据结构上阐述LDAP,它是
3、一个树型结构,能有效明确的描述一个组织结构特性的相关信息。在这个树型结构上的每个节点,我们称之为“条目(Entry)”,每个条目有自己的唯一可区别的名称(Distinguished Name,DN)。条目的DN是由条目所在树型结构中的父节点位置(Base DN)和该条目的某个可用来区别身份的属性(称之为RDN如uid,cn、ou)组合而成。LDAPLDAP存储的数据存储的数据适合存放在目录服务器中的数据需要经常读取而又较少更改的数据比较容易表示成由属性构成的数据需要在多个用户间共享的数据需要在不同的地点访问的数据不适合存放目录服务器的数据需要经常更改数据量非常的大,结构化又非常的差例如文档,报
4、告等无法用属性集合表示LDAPLDAP产品介绍产品介绍厂商产品介绍SUN SUNONE Directory Server基于文本数据库的存储,速度快 IBM IBM Directory Server基于DB2 的的数据库,速度一般ORACLE Oracle Internet Directory基于oracle 的的数据库,速度一般Novell Novell Directory Server基于文本数据库的存储,速度快,不常用到Microsoft Microsoft Active Directory基于WINDOWS系统用户,对大数据量管理速度不太理想,漏洞太多,但是实施简单Opensource
5、 OpensourceOpenLDAP 开源的项目,速度很快,但是非主 流应用LDAPLDAP目录树的几个主要概念目录树的几个主要概念目录树在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目条目每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN),条目的DN是由条目所在树型结构中的父节点位置和该条目的某个可用来区别身份的属性组合而成。条目是由对象类、属性以及对应的值组成对象类与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来属性描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非
6、必须属性LDAPLDAP目录树的几个主要概念目录树的几个主要概念关键字关键字英文全称英文全称含义含义dcDomain Component域名的部分,其格式是将完整的域名分成几部分,如域名为变成dc=example,dc=comuidUser Id用户ID,如“tom”ouOrganization Unit组织单位,类似于Linux文件系统中的子目录,它是一个容器对象,组织单位可以包含其他各种对象(包括其他组织单元),如“market”cnCommon Name公共名称,如“Thomas Johansson”snSurname姓,如“Johansson”dnDistinguished Name惟
7、一辨别名,类似于Linux文件系统中的绝对路径,每个对象都有一个惟一的名称,如“uid=tom,ou=market,dc=example,dc=com”,在一个目录树中DN总是惟一的rdnRelative dn相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn=Thomas Johansson”LDAPLDAP目录树结构目录树结构LDAPLDAP目录树结构目录树结构LDAPLDAP目录树分析目录树分析对于条目”ou=G0000001”这个条目来说:它的全部路径Full DN是:“ou=G0000001,ou=root,ou=organization
8、,cn=icfp,dc=cib,dc=com”父节点路径Base DN是:“ou=root,ou=organization,cn=icfp,dc=cib,dc=com”相对RDN:“ou=G0000001”LDAPLDAP使用使用(1)连接到LDAP服务器(2)绑定到LDAP服务器匿名或作为特定用户(3)在LDAP服务器上执行所需的任何操作(4)释放LDAP服务器的连接LDAPLDAP使用使用-iCFPiCFP连接、绑定连接、绑定LDAPLDAP服务服务(1)Java API操作LDAPJNDI(The Java Naming and Directory Interface,Java命名和目录
9、接口)是一组在Java应用中访问命名和目录服务的API。(2)Spring操作LDAPSpring LDAP 是一个用于操作 LDAP 的 Java 框架。它是基于 Spring 的 JdbcTemplate 模式。这个框架能够帮助开发人员简化 looking up,closing contexts,encoding/decoding values与 filters 等操作。LDAPLDAP使用使用-连接连接LDAPLDAP服务服务Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。Javax.naming.directory:
10、这个包包含了对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。LDAPLDAP使用使用-连接连接LDAPLDAP服务服务Context是一套name-to-object的绑定(bindings),可以理解为层次或目录。在使用命名和目录服务时获得context是对整个名字空间操作的入口。在目录服务中使用DirContext及其
11、实现类.对于名字服务由InitialContext开始,目录服务则使用InitialDirContextLDAPLDAP使用使用-连接连接LDAPLDAP服务服务javax.naming.directory.InitialDirContext,初始化目录服务上下文类 该类是LDAP数据内容的操作工具类,通过该类可以执行绑定LDAP服务器、新增LDAP条目、获取条目实例、修改条目属性、删除条目和根据条件搜索条目等操作。Javax.naming.directory.DirContext是实现了Context接口的类。用这个类作为命名服务的入口。为了创建DirContext对象,构造器以java.u
12、til.Hashtable的形式设置一组属性。常用属性说明在使用JNDI之前,需要先获取JNDI的提供者,并在系统注册它。与JNDI相关的系统属性在javax.naming.Context中定义,常用的属性:java.naming.factory.initial指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负责为其服务创建适当的DirContext对象。File Systemcom.sun.jndi.fscontext.RefFSContextFactory LDAPcom.sun.jndi.ldap.LdapCtxFactory RMIcom.sun.j
13、ndi.rmi.registry.RegistryContextFactory CORBAcom.sun.jndi.cosnaming.CNCtxFactory DNScom.sun.jndi.dns.DnsContextFactory属性说明java.naming.provider.url用来配置InitialContext的初始url对于目录服务,由于一般需要安全设置,还通常使用:java.naming.security.authentication安全类型,三个值:none,simple或strong。java.naming.security.principal认证信息。java.nam
14、ing.security.credentials证书信息。iCFP连接LDAPSpring LDAPSpring LDAP用Spring LDAP最小需要JAR包:spring-ldapspringldap包springcore用于spring框架内部的工具类springbeans操作java beans的接口和类springcontext应用对象获取资源springdao数据访问、异常处理机制commonslogging简单的日志处理配置配置LDAPLDAP数据源数据源 使用使用Spring LDAPSpring LDAP访问数据访问数据LDAPLDAP库库public class User
15、LdapServiceImpl extends DefaultServiceImpl implements IUserLdapService private LdapTemplate ldapTemplate;public void setLdapTemplate(LdapTemplate ldapTemplate)this.ldapTemplate=ldapTemplate;LDAPLDAP使用使用-具体操作具体操作在LDAP中共有4类操作:(1)查询类操作,如搜索、比较;(2)更新类操作,如添加条目、删除条目、修改条目;(3)认证类操作,如绑定、解绑定;(4)其他操作,如放弃和扩展操作Di
16、rContextDirContext操作操作绑定/创建LDAP条目对象,相当于新增一个LDAP条目数据void bind(Name name,Object obj,Attributes attrs)void bind(String name,Object obj,Attributes attrs)DirContext createSubcontext(Name name,Attributes attrs)DirContext createSubcontext(String name,Attributes attrs)修改LDAP条目对象关联的属性,相当于修改一个LDAP条目数据void mod
17、ifyAttributes(Name name,int mod_op,Attributes attrs)void modifyAttributes(String name,int mod_op,Attributes attrs)ADD_ATTRIBUTE、REPLACE_ATTRIBUTE、REMOVE_ATTRIBUTE删除LDAP条目,并将它从名称空间中移除void destroySubcontext(Name name)void destroySubcontext(String name)查询在命名上下文或对象中搜索符合给定搜索过滤器的项。NamingEnumeration search
18、(String name,String filter,SearchControls cons)NamingEnumeration search(Name name,String filter,SearchControls cons)LdapTemplateLdapTemplate操作操作查询,类似于模糊查询search(String base,String filter,ContextMapper mapper)根据唯一判别属性查询Object lookup(Name dn,ContextMapper mapper)绑定属性、创建一条记录void bind(DirContextOperatio
19、ns ctx)修改属性、修改记录void modifyAttributes(DirContextOperations ctx)解除绑定、删除void unbind(String dn)void unbind(Name dn)LDAPLDAP目录搜索目录搜索LDAP搜索是目录服务最常用的功能之一。在LDAP服务中搜索要用到相应的Filter语句。Filter语句由3个部分组成:1 属性,如:cn,uid,操作属性如:objectClass,nsroledn 2 比较操作符,如 ,=,3 逻辑预算符,如:与操作&,或操作|,非操作!LDAPLDAP目录搜索目录搜索-Filter-Filter运算符
20、运算符 搜索类型运算符说明等于=返回所含属性值与指定的值完全匹配的条目如:sn=张三存在=*返回包含所指定属性的一个或多个值的条目如:cn=*;email=*子字符串=string*string返回所含属性中包含指定子字符串的条目如:cn=G*;email=*zhang*;telephone=8*0大于等于=返回所含属性大于或等于指定值的条目如:indexNo=1000小于等于=返回所含属性大于或等于指定值的条目如:indexNo=1000近似于=返回的条目中所含的指定属性的值近似等于指定的值如:sn=tomLDAPLDAP目录搜索目录搜索-布尔运算符布尔运算符 运算符符号说明AND&所有指定
21、的过滤器都必须为真时,该语句才为真如:(&(filter)(filter)(filter)OR|至少指定的一个过滤器为真,该语句才为真如:(|(filter)(filter)(filter)NOT!指定的语句必须非真时,该语句才为真。只有一个过滤器受NOT运算符的影响如:(!(filter)LDAPLDAP目录搜索用例目录搜索用例 搜索包含一个或多个 email 属性值的条目 email=*搜索包含通用名 Rubby的条目 sn=Rubby返回所有不包含通用名 Rubby的条目(!(sn=Rubby)返回的所有条目中都有包含子字符串 description的说明属性description=*d
22、escription*返回所有不代表人员的条目(!(objectClass=User)返回所有不代表人员且通用名近似于 Rubby 的条目(&(!(objectClass=User)(cn=Rubby)返回所有组织机构父节点为 G0000001 且说明字段中不包含子字符串 description的条目(&(superUnitID1=G0000001)(!(description=*description*)返回所有组织机构父节点为 G0000001且 机构名称 包含分行或 大客户部 的条目(&(superUnitID1=G0000001)(|(sn=*分行*)(sn=大客户部)LDAPLDAP使用使用-关闭资源关闭资源javax.naming.Context.close()方法的具体实现演示示例演示示例:讨论讨论提问和讨论提问和讨论