博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringLDAP-Reference (中文文档四)
阅读量:6705 次
发布时间:2019-06-25

本文共 2548 字,大约阅读时间需要 8 分钟。

hot3.png

第四章 添加missing API方法重载

 

4.1自定义查询方法

尽管在LdapTemplate中有很多的DirContext重载方法,但它不可能对每个方法都这样做,因为方法太多了,但是我们提供一种方法使用LdapTemplate来得到你想要的conetxt

比如说你要调用如下的context方法

 NamingEnumerationsearch(Namename,StringfilterExpr,Object[]filterArgs,SearchControlsctls)

在LdapTemplate中没有合适的重载方法,我们可以用自定义的SearchExecutor实现

 publicinterfaceSearchExecutor{

  publicNamingEnumerationexecuteSearch(DirContextctx)throwsNamingException;
 }
 
 在你自己定义的执行程序(executor)中,你可以连接DirContext,调用你想要的方法,然后你需要提供一个处理程序来处理返回结果。你可以使用现有的
 CollectingNameClassPairCallbackHandler,收集到一个内部集合中,为了执行搜索,在LdapTemplate中需要一个执行程序和处理程序(an executor and a handler)
 最后,返回你想要的结果集合
 
 例4.1 使用SearchExecutor和AttributesMapper执行自定义查询
 
  packagecom.example.dao;
  publicclassPersonDaoImplimplementsPersonDao{
  ...
  publicListsearch(finalNamebase,finalStringfilter,finalString[]params,
  finalSearchControlsctls){
  SearchExecutorexecutor=newSearchExecutor(){
  publicNamingEnumerationexecuteSearch(DirContextctx){
  returnctx.search(base,filter,params,ctls);
  }
  };
  CollectingNameClassPairCallbackHandlerhandler=
  newAttributesMapperCallbackHandler(newPersonAttributesMapper());
  ldapTemplate.search(executor,handler);
  returnhandler.getList();
  }
  }
  
  如果你更喜欢用ContextMapper生成AttributesMapper,可以这样
  
  例4.2 使用 SearchExecutor and ContextMapper的查询方法
  packagecom.example.dao;
  publicclassPersonDaoImplimplementsPersonDao{
  ...
  publicListsearch(finalNamebase,finalStringfilter,finalString[]params,
  finalSearchControlsctls){
  SearchExecutorexecutor=newSearchExecutor(){
  publicNamingEnumerationexecuteSearch(DirContextctx){
  returnctx.search(base,filter,params,ctls);
  }
  };
  CollectingNameClassPairCallbackHandlerhandler=
  newContextMapperCallbackHandler(newPersonContextMapper());
  ldapTemplate.search(executor,handler);
  returnhandler.getList();
  }
  }
  
  注意
  
  当我们使用ContextMapperCallbackHandler时,必须在SearchControls中setReturningObjFlag(true)
  
  4.2 实现其它自定义的Context Methods
  
  同自定义查询方法一样,你可以在Dircontext中使用ContextExecutor
  
   publicinterfaceContextExecutor{
   publicObjectexecuteWithContext(DirContextctx)throwsNamingException;
   }

   当实现一个自定义的ContextExecutor时,  executeReadOnly() 或者executeReadWrite(),比如我们要调用此方法

   
   Object lookupLink(Namename)
   
   在现有DirContext中,没有相对应的LdapTemplate方法,它是个查询方法,所以是只读的,我们可以这样实现它:
   
   例4.3 使用ContextExecutor的自定义DirContext
   
   packagecom.example.dao;
   publicclassPersonDaoImplimplementsPersonDao{
   ...
   publicObjectlookupLink(finalNamename){
   ContextExecutorexecutor=newContextExecutor(){
   publicObjectexecuteWithContext(DirContextctx){
   returnctx.lookupLink(name);
   }
   };
   returnldapTemplate.executeReadOnly(executor);
   }
   }
   
   同样的操作你可以使用 executeReadWrite() 来执行

转载于:https://my.oschina.net/u/1044955/blog/277032

你可能感兴趣的文章
使用NetWeaver创建数据库连接
查看>>
Spring事物、面向切面编程、依赖注入简介
查看>>
Java 中带参带返回值方法的使用
查看>>
开发中的各种时间格式转换(一)
查看>>
iSCSI安全之密码认证
查看>>
MySQL运维命令大全
查看>>
MySQL分区表(优化)
查看>>
Linux 系统之扩展表达式 --egrep
查看>>
shell终端中更改提示符颜色
查看>>
NEC开发了深度学习自动优化技术、更易于提高识别精度
查看>>
linux定时任务crond那些事!
查看>>
mysql慢日志分析工具之mysqlsla学习笔记
查看>>
nginx基本配置与参数说明
查看>>
修改防火墙
查看>>
thinkphp中取部分字段用法
查看>>
Linux系统虚拟机管理及redhat7.2的安装
查看>>
handsontable 和 echarts都定义了require方法,初始化时冲突了,怎么办?
查看>>
XP与XP互连
查看>>
jmeter安装
查看>>
LINUX中VSFTP服务器的基本配置
查看>>