第四章 添加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() 来执行
分享到:
相关推荐
### Spring LDAP 参考文档详解 #### 前言 Spring LDAP 是一款为简化 LDAP (Lightweight Directory Access Protocol) 操作而设计的框架。它基于 Spring 框架,利用了 Spring 的强大功能来实现对 LDAP 目录的访问、...
由于提供的文件内容是关于Spring Security的参考资料,接下来将详细说明Spring Security 4.0.4.RELEASE版本中涉及的关键知识点。在展开知识点介绍之前,需要指出,由于原文件可能包含一些格式错误或 OCR 识别的问题...
根据给定的文件信息,以下是对“Spring-LDAP”参考文档的知识点总结与扩展: ### Spring-LDAP概述 Spring-LDAP是Spring框架的一部分,专注于提供与轻量级目录访问协议(LDAP)集成的功能。它简化了开发人员在Java...
2. `spring-ldap-reference.pdf`:这个文件很可能是 Spring LDAP 的官方参考文档,包含了框架的所有类、接口和方法的详细介绍,以及示例代码。通过阅读此文档,你可以深入理解 Spring LDAP 的工作原理,学习如何配置...
- **LDAP (spring-security-ldap.jar)**:提供 LDAP 认证和授权支持。 - **ACL (spring-security-acl.jar)**:提供了基于访问控制列表 (ACL) 的权限管理。 - **CAS (spring-security-cas.jar)**:支持使用 CAS 单点...
- LDAP (`spring-security-ldap.jar`):提供 LDAP 集成支持。 - ACL (`spring-security-acl.jar`):提供基于权限的访问控制功能。 - CAS (`spring-security-cas.jar`):提供对 CAS 协议的支持。 - OpenID (`...
### Spring Security 参考文档概览 #### 一、引言与基础知识 ##### 1.1 什么是 Spring Security? Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。它为应用程序提供了一种机制来保护自身免...
### Spring Security Reference中文版知识点概览 #### 一、Spring Security 概述 - **Spring Security** 是一个强大的和高度可定制的身份验证和访问控制框架。它为基于Spring的应用提供了声明式的安全服务。 ####...
标题: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...
首先,"Apache_Shiro_reference(中文版).pdf"是Shiro的官方中文参考手册。这个文档详细介绍了Shiro的各种组件和API,包括核心概念如Subject、Realms、Caches等,以及认证、授权、会话管理和密码策略等具体功能。通过...
`Reference_Guide_en-US.pdf`是关于JBoss Portal全面技术细节的参考文档,包括API详解、配置选项、系统架构等深入内容,适合开发者和高级用户查阅。 **8. 用户指南** `User_Guide_en-US.pdf`可能专注于用户界面和...