`
xrb2008
  • 浏览: 170980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringLDAP-Reference(中文文档)(五)

阅读更多

第五章 DirContext配制

5.1 自定义DirContext 前后处理
 某些情况下,在搜索前后要调用DirContext进行操作,进行这种操作的接口为DirContextProcessor
 
 publicinterfaceDirContextProcessor{
 publicvoidpreProcess(DirContextctx)throwsNamingException;
 publicvoidpostProcess(DirContextctx)throwsNamingException;
 }
 LdapTemplate有一个查询方法提供了DirContextProcessor
 
 publicvoidsearch(SearchExecutorse,NameClassPairCallbackHandlerhandler,
 DirContextProcessorprocessor)throwsDataAccessException;
 
 在查询之前,前处理方法提供了一个DirContextProcessor的实例 ,当查询完成并处理后,调用后处理方法,这对于用户在查询中调用DirContext,查询完成后检查
 DirContext非常有用。例如在处理请求和响应控制

 也有一些并不需要自定义SearchExecutor的方法:
 
  publicvoidsearch(Namebase,Stringfilter,
  SearchControlscontrols,NameClassPairCallbackHandlerhandler,DirContextProcessorprocessor)
  publicvoidsearch(Stringbase,Stringfilter,
  SearchControlscontrols,NameClassPairCallbackHandlerhandler,DirContextProcessorprocessor)
  publicvoidsearch(Namebase,Stringfilter,
  SearchControlscontrols,AttributesMappermapper,DirContextProcessorprocessor)
  publicvoidsearch(Stringbase,Stringfilter,
  SearchControlscontrols,AttributesMappermapper,DirContextProcessorprocessor)
  publicvoidsearch(Namebase,Stringfilter,
  SearchControlscontrols,ContextMappermapper,DirContextProcessorprocessor)
  publicvoidsearch(Stringbase,Stringfilter,
  SearchControlscontrols,ContextMappermapper,DirContextProcessorprocessor)
 
 5.2 实现一个请求控制的DirContextProcessor
 LDAPv3标准使用控制器来发送和接收数据来影响一些预定义行为,为了简化一个请求控制DirContextProcessor的实现,spring ldap提供了一基类
 AbstractRequestControlDirContextProcessor,这个方法来处理LdapContext的当前请求,控制方法调用一个模板创建的请求,并添加到Ldapcontext中,你要做的是在类中实现createRequestControl,和postProcess方法来实现查询后你要完成的操作。
  publicabstractclassAbstractRequestControlDirContextProcessorimplements
  DirContextProcessor{
  publicvoidpreProcess(DirContextctx)throwsNamingException{
  ...
  }
  publicabstractControlcreateRequestControl();
  }
   一个典型的DirContextProcessor,类似如下代码:
   
   例5.1 一个请求控制的实现
   packagecom.example.control;
   publicclassMyCoolRequestControlextendsAbstractRequestControlDirContextProcessor{
   privatestaticfinalbooleanCRITICAL_CONTROL=true;
   privateMyCoolCookiecookie;
   ...
   publicMyCoolCookiegetCookie(){
   returncookie;
   }
   publicControlcreateRequestControl(){
   returnnewSomeCoolControl(cookie.getCookie(),CRITICAL_CONTROL);
   }
   publicvoidpostProcess(DirContextctx)throwsNamingException{
   LdapContextldapContext=(LdapContext)ctx;
   Control[]responseControls=ldapContext.getResponseControls();
   for(inti=0;i<responseControls.length;i++){
   if(responseControls[i]instanceofSomeCoolResponseControl){
   SomeCoolResponseControlcontrol=(SomeCoolResponseControl)responseControls[i];
   this.cookie=newMyCoolCookie(control.getCookie());
   }
   }
   }
   }
  
  注意:
  当前使用Controls时,一定要使用LdapContextSource,这个接口是特定的用来使用LdapContext代替DirContext的,如果一个AbstractRequestControlDirContextProcessor子类调用的不是一个LdapContext参数,它将抛出异常IllegalArgumentException
  
  5.3 查询结果分页
  
  某些查询可能返回大量结果集。当我们没有简便的方法去筛选出较小的数据量时,它将方便的让服务器返回一定数量结果集,这称为分页搜索。结果的每一页和上下页链接将被显示出来,如果没有这个功能,客户端需手动限制结果页或检索整个结果集截取一部分,前者比较麻烦,后者比较消耗内存。
  
  许多Ldap服务器都支持PagedResultsControl,它发送请求,服务器返回搜索结果特定页,用户控制返回页进度(Rate),简单称为进度搜索,但是用户必须保持跟踪调用中的会话,使服务器知道上一次搜索结果页及从哪开始搜索。SpringLdap提供了使用LdapContext对搜索结果前后处理的分页方法,这在前面有讨论。它通过两个类
  PagedResultsRequestControl和PagedResultsCookie,PagedResultsRequestControl类建立了一个PagedResultsControl来请求页面大小,并放入LdapContext中,搜索完成后,从PagedResultsResponseControl中得到两部分信息,预计总结果大小及cookie。cookie是一个字节数组,包含了通过PagedResultsControl下一次调用服务器时所需的信息,为了更好的存储这些信息,ldap提供了包装类PagedResultsCookie.
  
  下面的例子展示了如何分页搜索。
  例5.2 使用PagedResultsRequestControl返回分页结果
  
  publicPagedResultgetAllPersons(PagedResultsCookiecookie){
  PagedResultsRequestControlcontrol=newPagedResultsRequestControl(PAGE_SIZE,cookie);
  SearchControlssearchControls=newSearchControls();
  searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
  Listpersons=ldapTemplate.search("","objectclass=person",searchControls,control);
  returnnewPagedResult(persons,control.getCookie());
  }
   
  第一次调用此方法,cookie参数将为NULL,但在随后的每一次调用时都要提供上次的PagedResult包装的cookie信息,当 Cookie无效时
  (pagedResult.getCookie().getCookie() returns null),即表示最后一批结果已返回。

 

2
2
分享到:
评论
1 楼 xfei6868 2010-04-29  
在spring-ldap 1.3的文档中也有同样的例子,没有找到此方法,遗憾中!

正在为分页的事情烦恼!

普通搜索 报出  ; nested exception is javax.naming.SizeLimitExceededException:

相关推荐

    spring-ldap-reference

    ### Spring LDAP 参考文档详解 #### 前言 Spring LDAP 是一款为简化 LDAP (Lightweight Directory Access Protocol) 操作而设计的框架。它基于 Spring 框架,利用了 Spring 的强大功能来实现对 LDAP 目录的访问、...

    spring-security-reference.pdf

    由于提供的文件内容是关于Spring Security的参考资料,接下来将详细说明Spring Security 4.0.4.RELEASE版本中涉及的关键知识点。在展开知识点介绍之前,需要指出,由于原文件可能包含一些格式错误或 OCR 识别的问题...

    Spring-ladp-reference

    根据给定的文件信息,以下是对“Spring-LDAP”参考文档的知识点总结与扩展: ### Spring-LDAP概述 Spring-LDAP是Spring框架的一部分,专注于提供与轻量级目录访问协议(LDAP)集成的功能。它简化了开发人员在Java...

    spring-ldap demo

    2. `spring-ldap-reference.pdf`:这个文件很可能是 Spring LDAP 的官方参考文档,包含了框架的所有类、接口和方法的详细介绍,以及示例代码。通过阅读此文档,你可以深入理解 Spring LDAP 的工作原理,学习如何配置...

    spring-security-reference-4.0.1

    - **LDAP (spring-security-ldap.jar)**:提供 LDAP 认证和授权支持。 - **ACL (spring-security-acl.jar)**:提供了基于访问控制列表 (ACL) 的权限管理。 - **CAS (spring-security-cas.jar)**:支持使用 CAS 单点...

    spring-security-reference-4.1.1.RELEASE

    - LDAP (`spring-security-ldap.jar`):提供 LDAP 集成支持。 - ACL (`spring-security-acl.jar`):提供基于权限的访问控制功能。 - CAS (`spring-security-cas.jar`):提供对 CAS 协议的支持。 - OpenID (`...

    spring-security-reference

    ### Spring Security 参考文档概览 #### 一、引言与基础知识 ##### 1.1 什么是 Spring Security? Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它为应用程序提供了一种机制来保护自身免...

    Spring Security Reference中文版

    ### Spring Security Reference中文版知识点概览 #### 一、Spring Security 概述 - **Spring Security** 是一个强大的和高度可定制的身份验证和访问控制框架。它为基于Spring的应用提供了声明式的安全服务。 ####...

    springsecurity3.1.pdf

    标题:springsecurity3.1.pdf 描述:springsecurity3.1.pdf 标签:spring security3.1 部分内容:SpringSecurity Reference Documentation by Ben Alex and Luke Taylor 3.1.4.RELEASE **一、Spring Security 3.1...

    shiro学习资料

    首先,"Apache_Shiro_reference(中文版).pdf"是Shiro的官方中文参考手册。这个文档详细介绍了Shiro的各种组件和API,包括核心概念如Subject、Realms、Caches等,以及认证、授权、会话管理和密码策略等具体功能。通过...

    jboss portal手册

    `Reference_Guide_en-US.pdf`是关于JBoss Portal全面技术细节的参考文档,包括API详解、配置选项、系统架构等深入内容,适合开发者和高级用户查阅。 **8. 用户指南** `User_Guide_en-US.pdf`可能专注于用户界面和...

Global site tag (gtag.js) - Google Analytics