Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > Ldap介绍,ldap介绍ppt

Ldap介绍,ldap介绍ppt

收藏

本作品内容为Ldap介绍,格式为 docx ,大小 130614 KB ,页数为 18页

Ldap介绍


('一、Ldap简介轻型目录访问协议,即LightweightDirectoryAccessProtocol(LDAP)是一个访问在线目录服务的协议。目录是一组具有类似属性、以一定逻辑和层次组合的信息。常见的例子是电话簿,由以字母顺序排列的名字、地址和电话号码组成。最新版本的LDAP协议由RFC4511所定义。概述鉴于原先的目录访问协议(DirectoryAccessProtocol即DAP)对于简单的互联网客户端使用太复杂,IETF设计并指定LDAP做为使用X.500目录的更好的途径。LDAP在TCP/IP之上定义了一个相对简单的升级和搜索目录的协议。常用词"LDAP目录"可能会被误解,而实际并没有"LDAP目录"这么一个目录种类。通常可以用它来描述任何使用LDAP协议访问并能用X.500标识符标识目录中对象的目录。与ISODE提供的X.500协议的网关相比,尽管OpenLDAP及其来自密歇根大学的前身等的目录基本上设计成专门为LDAP访问而优化的,但也没有比其他用LDAP协议访问的目录额外多出来所谓“LDAP目录”。协议的第三版由Netscape的TimHowes,ISODE的SteveKille和CriticalAngleInc的MarkWahl撰写。二、Ldap内容LDAP目录的条目(entry)由属性(attribute)的一个聚集组成,并由一个唯一性的名字引用,即专有名称(distinguishedname,DN)。例如,DN能取这样的值:“ou=groups,ou=people,dc=wikipedia,dc=org”。LDAP目录与普通数据库的主要不同之处在于数据的组织方式,它是一种有层次的、树形结构。所有条目的属性的定义是对象类objectclass的组成部分,并组成在一起构成schema;那些在组织内代表个人的schema被命名为whitepagesschema。数据库内的每个条目都与若干对象类联系,而这些对象类决定了一个属性是否为可选和它保存哪些类型的信息。属性的名字一般是一个易于记忆的字符串,例如用cn为通用名(commonname)命名,而"mail"代表e-mail地址。属性取值依赖于其类型,并且LDAPv3中一般非二进制值都遵从UTF-8字符串语法。例如,mail属性包含值“user@example.com”;jpegPhotos属性一般包含JPEG/JFIF格式的图片。LDAP目录条目可描述一个层次机构,这个结构可以反映一个政治、地理或者组织的范畴。在原始的X.500模型中,反应国家的条目位于树的顶端;接着是州或者民族组织。典型的LDAP配置使用DNS名称作为树形结构的顶端,下列是代表人、文档、组织单元、打印机和其他任何事务的条目。LDAP影响了后续的Internet协议,包括新版本的X.500、DirectoryServicesMarkupLanguage(DSML)、ServiceProvisioningMarkupLanguage(SPML)和ServiceLocationProtocol.三、Ldap与其他比较与数据库比较虽然目录也被称为特殊的数据库,但它不同于真正的数据库。目录的大部分操作为读操作。假如你的应用程序要写大量的数据,你应该考虑选择使用数据库来实现。目录支持相对简单的事务处理。相反,数据库被设计成处理大量的各种各样的事务处理。假如你的应用要求这种重负荷的事务支持,你该选择数据库而不是目录。在另一方面,假如你的应用不要求这样的大负荷事务处理,而是偶尔的写一些简单的事务信息。这时,目录是理想的选择。它会更有效,更简单。与文件系统比较目录被认为是很差的文件系统。文件通常很大,有几兆甚至更大,虽然目录被优化成存取很小的信息。应用程序以块的方式存取文件。文件系统支持各种调用--像seek(),read()和write(),这样可以写大文件的一部分的信息。目录不能提供这种随机的存取访问。目录条目被分成各种属性。你可以分别获取各种属性。你不能取得一个条目的部分值,如从第几个字节开始。与web的比较不象web服务器一样,目录不适合推送JPEG图象或Java程序给客户端。Web服务通常作为开发web应用的跳板。这些平台从CGI(公用网关接口)到更复杂的像Netscape应用服务平台。目录一般不提供这种形式的应用开发,甚至它不提供目录应用开发平台服务。与FTP比较与FTP的主要区别在于:数据量的大小和客户的类型。另外一点就是FTP是一个非常简单的协议,它专于做一件事情并把它做好。假如你想做的是把文件从一个地方传送到另一个地方,那么额外的目录下层结构也需要,如复制、查询、更新等。与DNS比较因特网的域名系统和目录有相似之处,它们都提供对分层式数据库的访问。但其它一些不同把它们区分开来。DNS的主要目的是把主机名转换成IP地址。比较而言,大多数目录有更普通的作用。DNS有一套专门的、固定的计划,而目录允许被扩展。DNS不允许更新它的信息,而目录可以。DNS可通过UDP的无连接的方式访问,而目录通常是连接访问的。四、Ldap服务器产品1、首推iPlanetDirectoryServer就是以前的NetscapeDirectoryServer2、OpenLdap(开放源码)3、Novell4、MiscroSoft的ActiveDirectory也提供LDAPv3接口5、Domino也有内部实现6、IBMSecurityDirectory五、java操作Ldap本人知道的Java操作Ldap有以下几种:JNDI-Ldap(JDK)、JLdap、JDBC-Ldap、LdapSdk、SpringLdap等。Ldap客户端:ldapbrowser、LDAPAdministrator、JXplorer等。从JDK5.0开始,对LDAP协议的数据访问操作就被集成在javax的扩展API包中,并随同JDK一并发布,这一章节,我们主要介绍API包中的类信息。javax.naming.directory包的结构常用API解析javax.naming.directory.InitialDirContext,初始化目录服务上下文类该类是LDAP数据内容的操作工具类,通过该类可以执行绑定LDAP服务器、新增LDAP条目、获取条目实例、修改条目属性、删除条目和根据条件搜索条目等操作。常用方法说明如下:初始化LDAP目录服务上下文(相当于使用JDBC打开一个数据库链接)\uf0b7InitialDirContext(Hashtableenvironment)绑定/创建LDAP条目对象(相当于新增一个LDAP条目数据bind(Name\uf0b7name,Objectobj,Attributesattrs)\uf0b7bind(Stringname,Objectobj,Attributesattrs)\uf0b7createSubcontext(Namename,Attributesattrs)\uf0b7createSubcontext(Stringname,Attributesattrs)获取条目实例(属性集)\uf0b7getAttributes(Namename)\uf0b7getAttributes(Namename,String[]attrIds)\uf0b7getAttributes(Stringname)\uf0b7getAttributes(Stringname,String[]attrIds)修改条目属性\uf0b7modifyAttributes(Namename,intmod_op,Attributesattrs)\uf0b7modifyAttributes(Namename,ModificationItem[]mods)\uf0b7modifyAttributes(Stringname,intmod_op,Attributesattrs)\uf0b7modifyAttributes(Stringname,ModificationItem[]mods)删除条目\uf0b7destroySubcontext(Namename)\uf0b7destroySubcontext(Stringname)根据属性集搜索条目\uf0b7search(Namename,AttributesmatchingAttributes)\uf0b7search(Namename,AttributesmatchingAttributes,String[]attributesToReturn)\uf0b7search(Stringname,AttributesmatchingAttributes)\uf0b7search(Stringname,AttributesmatchingAttributes,String[]attributesToReturn)根据过滤器搜索条目\uf0b7search(Namename,StringfilterExpr,Object[]filterArgs,SearchControlscons)\uf0b7search(Namename,Stringfilter,SearchControlscons)\uf0b7search(Stringname,StringfilterExpr,Object[]filterArgs,SearchControlscons)\uf0b7search(Stringname,Stringfilter,SearchControlscons)javax.naming.directory.BasicAttribute,LDAP基本属性对象该类用来表示LDAP条目中的单个属性对象。在目录服务中,每个属性名称是可以对应多个的属性值的。构建属性对象\uf0b7BasicAttribute(Stringid)\uf0b7BasicAttribute(Stringid,booleanordered)\uf0b7BasicAttribute(Stringid,Objectvalue)\uf0b7BasicAttribute(Stringid,Objectvalue,booleanordered)添加属性值\uf0b7add(intix,ObjectattrVal),添加属性值到多值属性的指定位置\uf0b7add(ObjectattrVal),追加属性值到多值属性尾部判断属性值是否包含\uf0b7contains(ObjectattrVal),多值属性中有一个值是匹配的,返回true获取属性值\uf0b7get(),取得属性值中的一个\uf0b7get(intix),从多值属性中的指定位置取值获取属性ID\uf0b7getID(),属性的ID就是属性名删除属性值\uf0b7remove(intix),删除指定位置的属性值\uf0b7remove(Objectattrval),删除指定的属性值javax.naming.directory.BasicAttributes,LDAP实体的属性集该类表示一个LDAP条目绑定的属性集合,在绝大多数情况下,一个LDAP条目存在多个属性。构造属性集\uf0b7BasicAttributes()\uf0b7BasicAttributes(booleanignoreCase),属性ID是否大小写敏感,建议不要使用敏感\uf0b7BasicAttributes(StringattrID,Objectval)\uf0b7BasicAttributes(StringattrID,Objectval,booleanignoreCase)获取属性集中的单个属性对象\uf0b7get(StringattrID)获取全部属性的枚举\uf0b7getAll()获取全部属性的ID枚举\uf0b7getIDs()添加新属性\uf0b7put(Attributeattr)\uf0b7put(StringattrID,Objectval)移除指定属性\uf0b7remove(StringattrID)javax.naming.directory.SearchControls,LDAP目录服务搜索控制对象该类负责控制LDAP搜索行为的范围、设定返回结果数上限,搜索耗时上限,指定结果所包括的属性集等。设定搜索行为的范围\uf0b7setSearchScope(intscope)设定返回结果数上限\uf0b7setCountLimit(longlimit)设定搜索耗时上限\uf0b7setTimeLimit(intms),以毫秒为单位指定结果所包括的属性集\uf0b7setReturningAttributes(String[]attrs)javax.naming.directory.SearchResult,表示.search()方法的返回结果集中的一项。SearchResult类是对LDAP条目属性集的封装。在search()操作中可能返回完整的条目属性,也可能是条目属性的一部分。获取SearchResult封装的条目属性\uf0b7getAttributes()以上只列举了LDAP操作API的常用部分,更多更详细的描述,请参考SunJava6.0APIDOC。本人最近在研究java对微软的AD域服务器的分页操作,以下是具体的详细代码。其中分页遇到的问题有下:1、搜索结果数据量大于10W或者50W以后,使用VirtualListViewControl.java,会出现异常:javax.naming.OperationNotSupportedException:[LDAP:errorcode12-00002040:SvcErr:DSID-031401E7,problem5010(UNAVAIL_EXTENSION),data0];remainingname\'\'解决方案:设置AD域服务器参数:MaxTempTableSize,默认值为10000。若搜寻结果大于10W,建议设置为15W;若搜索结果大于50w,建议设置100W;若搜索结果大于100W,建议设置200W。(但不知道是否对Ldap服务器其他性能造成影响)2、搜索结果数据量大于10W以上以后,使用PagedResultsControl,出现问题:PageSize设置小于1000.将pageSize设置为1000时,一直在循环获取数据,不会出现异常。若小于1000,则会出现问题。具体代码如下:packagecom.zhao.edu;importjava.util.Hashtable;importjavax.naming.Context;importjavax.naming.NamingException;importjavax.naming.directory.DirContext;importjavax.naming.ldap.InitialLdapContext;publicclassLdapConnection{/服务提供者privatestaticStringCTX_FACTORY="com.sun.jndi.ldap.LdapCtxFactory";/获取上下文publicstaticInitialLdapContextgetLdapContext(Stringurl,Stringusername,Stringpwd){Hashtableenv=newHashtable();env.put(Context.INITIAL_CONTEXT_FACTORY,CTX_FACTORY);env.put(Context.PROVIDER_URL,url);env.put(Context.SECURITY_AUTHENTICATION,"simple");env.put(Context.SECURITY_PRINCIPAL,username);env.put(Context.SECURITY_CREDENTIALS,pwd);DirContextctx=null;try{ctx=newInitialLdapContext(env,null);System.out.println("认证成功");}catch(NamingExceptione){e.printStackTrace();System.out.println("认证失败");}return(InitialLdapContext)ctx;}/关闭上下文publicstaticvoidcloseLdapContext(DirContextctx)throwsNamingException{if(null!=ctx){ctx.close();System.out.println("关闭连接");}}}packagecom.zhao.edu;importjavax.naming.NamingEnumeration;importjavax.naming.directory.Attribute;importjavax.naming.directory.Attributes;importjavax.naming.directory.SearchControls;importjavax.naming.directory.SearchResult;importjavax.naming.ldap.Control;importjavax.naming.ldap.InitialLdapContext;importjavax.naming.ldap.SortControl;publicclassLdapSearch{privatestaticfinalStringldapHost="ldap://192.168.32.128:389";privatestaticfinalStringloginDN="cn=Administrator,cn=Users,dc=zhao,dc=edu,dc=com";privatestaticfinalStringpassword="zhaowg";publicstaticvoidmain(String[]args)throwsException{InitialLdapContextctx=LdapConnection.getLdapContext(ldapHost,loginDN,password);try{intpageNum=30;intpageSize=500;SearchControlsconstraints=newSearchControls();constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);constraints.setCountLimit(0);constraints.setTimeLimit(5000);constraints.setDerefLinkFlag(false);String[]attrIDs={"sAMAccountName","distingguishedName"};constraints.setReturningAttributes(attrIDs);VirtualListViewControlvctl=newVirtualListViewControl((pageNum-1)pageSize+1,0,0,pageSize-1,Control.CRITICAL);SortControlsctl=newSortControl(newString[]{"sAMAccountName"},Control.CRITICAL);ctx.setRequestControls(newControl[]{sctl,vctl});StringbaseDN="dc=zhao,dc=edu,dc=com";Stringfilter="objectClass=";NamingEnumerationresults=ctx.search(baseDN,filter,constraints);inttotal=0;while(results!=null&&results.hasMore()){total++;SearchResultresult=results.nextElement();Stringvalue=result.getName();//System.out.print(total+"节点DN:"+value);Attributesattrs=result.getAttributes();AttributeocAttr=attrs.get("sAMAccountName");for(inti=0;ocAttr!=null&&idraft-ietf-ldapext-ldapv3-vlv-09.txt.Thecontrol\'svaluehasthefollowingASN.1definition:

VirtualListViewRequest::=SEQUENCE{beforeCountINTEGER(0..maxInt),afterCountINTEGER(0..maxInt),CHOICE{byoffset[0]SEQUENCE{offsetINTEGER(0..maxInt),contentCountINTEGER(0..maxInt)}greaterThanOrEqual[1]AssertionValue}contextIDOCTETSTRINGOPTIONAL}
Thiscontrolisalwaysusedinconjunctionwiththeserver-sidesortcontrol(RFC-2891).finalpublicclassVirtualListViewControlextendsBasicControl{/Thevirtual-list-viewcontrol\'sassignedobjectidentifieris2.16.840.1.113730.3.4.9.publicstaticfinalStringOID="2.16.840.1.113730.3.4.9";/Thenumberofentriesbeforethetargetentryinasublist.privateintbeforeCount;/Thenumberofentriesafterthetargetentryinasublist.privateintafterCount;/Anoffsetintothelist.privateinttargetOffset=-1;/Anestimateofthenumberofentriesinthelist.privateintlistSize;/Attributevalueusedtolocatethetargetentry.Thisvalueiscomparedtovaluesoftheattributespecifiedastheprimarysortkey.OnlyStringandbyte[]valuesarecurrentlysupported.privateObjecttargetAttrValue=null;/Aserver-generatedcookie.privatebyte[]cookie=null;privatestaticfinallongserialVersionUID=7739016048653396131L;/Constructsavirtual-list-viewcontrol.Requestaviewofaportionofthelistcenteredaroundagiventargetentry.Thepositionofthetargetentryisestimatedasapercentageofthelist.percentageofthelist.Forexample,avalueof25indicatesthatthetargetentryisatthe25percentmarkinthelist.viewofthelist.outsidetherange0-100.publicVirtualListViewControl(inttargetPercentage,intviewSize,booleancriticality)throwsIOException{super(OID,criticality,null);if((targetPercentage>100)(targetPercentage<0)(viewSize<0)){thrownewIllegalArgumentException();}targetOffset=targetPercentage;listSize=100;//viewSizeincludesthetargetentryif(viewSize>0){viewSize-=1;}beforeCount=afterCount=viewSize/2;//adjustafterCountwhenviewSizeisoddif(viewSize!=((viewSize/2)2)){afterCount++;}super.value=setEncodedValue();}/Constructsavirtual-list-viewcontrol.Requestaviewofaportionofthelistwiththespecifiednumberofentriesbeforeandafteragiventargetentry.Thetargetentryisidentifiedbymeansofanoffsetintothelist.intothelist.targetentry.targetentry.beforeCountorafterCountarelessthanzero.publicVirtualListViewControl(inttargetOffset,intlistSize,intbeforeCount,intafterCount,booleancriticality)throwsIOException{super(OID,criticality,null);if((targetOffset<0)(listSize<0)(beforeCount<0)(afterCount<0)){thrownewIllegalArgumentException();}this.targetOffset=targetOffset;this.listSize=listSize;this.beforeCount=beforeCount;this.afterCount=afterCount;super.value=setEncodedValue();}/Constructsavirtual-list-viewcriticalcontrol.Requestaviewofaportionofthelistcenteredaroundagiventargetentry.Thetargetentryisthefirstentrythatisgreaterthanorequaltothespecifiedattributevalue.Thevalue\'sattributeIDistheprimarysortkeyspecifiedintheserver-sidesortcontrol.entry.ItsattributeIDisthatoftheprimarysortkeyspecifiedintheserver-sidesortcontrol.viewofthelist.targetAttrValueisneitheraStringnorabyte[].publicVirtualListViewControl(ObjecttargetAttrValue,intviewSize,booleancriticality)throwsInvalidAttributeValueException,IOException{super(OID,criticality,null);if((targetAttrValue==null)(!((targetAttrValueinstanceofString)(targetAttrValueinstanceofbyte[])))){thrownewInvalidAttributeValueException();}this.targetAttrValue=targetAttrValue;if(viewSize<0){thrownewIllegalArgumentException();}//viewSizeincludesthetargetentryif(viewSize>0){viewSize-=1;}beforeCount=afterCount=viewSize/2;//adjustafterCountwhenviewSizeisoddif(viewSize!=((viewSize/2)2)){afterCount++;}super.value=setEncodedValue();}/Constructsavirtual-list-viewcontrol.Requestaviewofaportionofthelistwiththespecifiednumberofentriesbeforeandafteragiventargetentry.Thetargetentryisthefirstentrythatisgreaterthanorequaltothespecifiedattributevalue.Thevalue\'sattributeIDistheprimarysortkeyspecifiedintheserver-sidesortcontrol.entry.ItsattributeIDisthatoftheprimarysortkeyspecifiedintheserver-sidesortcontrol.targetentry.targetentry.targetAttrValueisneitheraStringnorabyte[].afterCountarelessthanzero.publicVirtualListViewControl(ObjecttargetAttrValue,intbeforeCount,intafterCount,booleancriticality)throwsInvalidAttributeValueException,IOException{super(OID,criticality,null);if((targetAttrValue==null)(!((targetAttrValueinstanceofString)(targetAttrValueinstanceofbyte[])))){thrownewInvalidAttributeValueException();}if((beforeCount<0)(afterCount<0)){thrownewIllegalArgumentException();}this.targetAttrValue=targetAttrValue;this.beforeCount=beforeCount;this.afterCount=afterCount;super.value=setEncodedValue();}/Setsaserver-generatedcookieinthevirtual-list-viewrequest.publicvoidsetContextID(byte[]contextID)throwsIOException{if(this.cookie!=contextID){this.cookie=contextID;super.value=setEncodedValue();//re-encode}else{this.cookie=contextID;}}/SetstheASN.1BERencodedvalueofthevirtual-list-viewcontrol.TheresultistherawBERbytesincludingthetagandlengthofthecontrol\'svalue.ItdoesnotincludethecontrolsOIDorcriticality.valueoftheLDAPsortcontrol.privatebyte[]setEncodedValue()throwsIOException{//buildtheASN.1encodingBerEncoderber=newBerEncoder(64);ber.beginSeq(Ber.ASN_SEQUENCEBer.ASN_CONSTRUCTOR);ber.encodeInt(beforeCount);ber.encodeInt(afterCount);if(targetOffset>=0){ber.beginSeq(Ber.ASN_CONTEXTBer.ASN_CONSTRUCTOR0);ber.encodeInt(targetOffset);ber.encodeInt(listSize);ber.endSeq();}else{if(targetAttrValueinstanceofString){ber.encodeString((String)targetAttrValue,(Ber.ASN_CONTEXT1),true);}else{//byte[]ber.encodeOctetString((byte[])targetAttrValue,(Ber.ASN_CONTEXT1));}}if(cookie!=null){ber.encodeOctetString(cookie,Ber.ASN_OCTET_STR);}ber.endSeq();returnber.getTrimmedBuf();}}',)


  • 编号:1700774816
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:18页
  • 格式:docx
  • 风格:商务
  • PPT页数:130614 KB
  • 标签:

广告位推荐

相关其他文档更多>