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

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

阅读更多

序言

      Ldap jndi类似于sql编程用jdbc访问数据库,JDBC和JAVA LDAP之间有若干个相同点,虽然是两种完全不同的利弊权衡不同的API,但它们有着一些共有的特性

  *即使是最简单的任务,它们都需要大量的底层命令来处理
  *不管发生什么情况,程序必须要正确的关闭
  *异常处理困难
  
       以上的几点情况导致了APIS的普通使用中存在着大量的重复代码,正如我们都知道,重复代码是最严重的一个问题。总之,归结为java程序中的jdbc和ldap都难以置信地重复和落后。

      SpringJDBC是spring框架的一部分,它提供了简明的SQL程序接口,对于JAVA LDAP程序,我们需要一个与之类似的框架。

 

  
第一章 介绍

1.1概述

 SpringLDAP是一个简单的LDAP的Java编程库,建立在作为JdbcTemplate的SpringJDBC同样的原则,它完全无需担心创建和关闭LdapContext和NamingEnumeration遍历,它还提供了一个更为全面的未经检查的异常层次结构,建立在Spring的 DataAccessException 基础上, 附带的,它还提供了对属性的LDAP动态过滤器和DNS(DistinguishedNames),LDAP属性管理,客户端的LDAP事务管理。
 设想,一个案例,一个方法要将一些person的属性搜索出来并存储在一个列表中返回,如果使用JDBC,我们需要建立一个连接,执行查询语句。我们将循环结果集并检索我们需要的属性,将它放在一个列表中。相比之下,使用JAVA LDAP ,我们将建立一个上下文(CONTEXT)使用搜索过滤器执行搜索,循环结果集,检索我们需要的属性放在一个列表中。
 
 JAVA LDAP 对一个人的姓名查询的传统方式看起来像这样,具体执行方法为粗体部分。(代码间没空格,比较乱,建议对照英文文档)
 packagecom.example.dao;
publicclassTraditionalPersonDaoImplimplementsPersonDao{
publicListgetAllPersonNames(){
Hashtableenv=newHashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,"ldap://localhost:389/dc=example,dc=com");
DirContextctx;
try{
ctx=newInitialDirContext(env);
}catch(NamingExceptione){
thrownewRuntimeException(e);
}
LinkedListlist=newLinkedList();
NamingEnumerationresults=null;
try{
SearchControlscontrols=newSearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
results=ctx.search("","(objectclass=person)",controls);
while(results.hasMore()){
SearchResultsearchResult=(SearchResult)results.next();
Attributesattributes=searchResult.getAttributes();
Attributeattr=attributes.get("cn");
Stringcn=(String)attr.get();
list.add(cn);

}
}catch(NameNotFoundExceptione){
//Thebasecontextwasnotfound.
//Justcleanupandexit.
}catch(NamingExceptione){
thrownewRuntimeException(e);
}finally{
if(results!=null){
try{
results.close();
}catch(Exceptione){
//Nevermindthis.
}
}
if(ctx!=null){
try{
ctx.close();

}catch(Exceptione){
//Nevermindthis.
}
}
}
returnlist;
}
}

 

使用spring ldap的AttributesMapper和 LdapTemplate,我们可以用下列代码实现相同的功能

packagecom.example.dao;
publicclassPersonDaoImplimplementsPersonDao{
privateLdapTemplateldapTemplate;
publicvoidsetLdapTemplate(LdapTemplateldapTemplate){
this.ldapTemplate=ldapTemplate;
}
publicListgetAllPersonNames(){
returnldapTemplate.search(
"","(objectclass=person)",
newAttributesMapper(){
publicObjectmapFromAttributes(Attributesattrs)
throwsNamingException{
returnattrs.get("cn").get();
}
});
}
}

以上代码明显比传统方式更加节省了代码数量,LdapTemplate的搜索方法执行搜索,将属性信息放在一个字符串中放在AttributesMapper中,然后将它放在集合中返回。
需要注意的是,这个PersonDaoImpl代码只是一个特定的简单实例,而不能用于任何地方,为此,Sping Ldap提供了一个set方法,There is nothing Spring-specific about this"Inversion of Control",
任何人都可以创建一个PersonDaoImpl实例,并注入LdapTemplate.不管如何,Spring提供了一个简便容易的方法实现了它,Spring容器可以告诉一个实例与LdapTemplate的依赖关系,并将它注入到PersonDao实例中。定义方式有很多种,通常采用XML方式

<beans>
<beanid="contextSource"class="org.springframework.ldap.core.support.LdapContextSource">
<propertyname="url"value="ldap://localhost:389"/>
<propertyname="base"value="dc=example,dc=com"/>
<propertyname="userDn"value="cn=Manager"/>
<propertyname="password"value="secret"/>
</bean>
<beanid="ldapTemplate"class="org.springframework.ldap.core.LdapTemplate">
<constructor-argref="contextSource"/>
</bean>
<beanid="personDao"class="com.example.dao.PersonDaoImpl">
<propertyname="ldapTemplate"ref="ldapTemplate"/>
</bean>
</beans>

1.2包概述

至少,使用Spring Ldap你需要:
? spring-ldap-core (the SpringLDAP library)
? spring-core (内部公用类)
? spring-beans (操作Java Bean接口)
? commons-logging (a simple logging facade,used internally)
? commons-lang (misc utilities,used internally)

除了以上这些包,你还可能需要以下这些:
? spring-context (如果你要使用Spring上下文,采用一致的API增加对资源获取的能力,如果你有必要对BaseLdapPathBeanPostProcessor规划使用.)
? spring-tx (如果你需要使用客户端的补偿事务(compensating transaction)支持)
? spring-jdbc (如果你需要操作数据库)
? ldapbp (Sun Ldap增强包--如果你要使用Ldap V3标准且你没使用JAVA5或更高版本)
? commons-pool (如果你需要使用连接池功能)

1.3 包结构
本节提供了一个Spring Ldap包逻辑结构的示意图,包之间的依赖关系已经注明

(图插不上来,对照英文文档)
1.3.1.org.springframework.transaction.compensating
该包提供了通用的事务支持,这不同于LDAP-specific or JNDI-specific
*依赖关系:commons-logging

1.3.2.org.springframework.ldap
该包提供了异常处理库,这种uncheck层次的异常反映了NamingException的层次。
*依赖关系:spring-core

1.3.3.org.springframework.ldap.core
该包包含了开发的核心接口,这些接口包括AuthenticationSource,ContextSource,DirContextProcessor,和NameClassPairCallbackHandler,而且包含了class LdapTemplate核心,加上各种映射及执行代码
*依赖关系:ldap,ldap.support,spring-beans,spring-core,spring-tx,commons-lang,commons-logging

1.3.4.org.springframework.ldap.core.support
该包提供了接口实现的核心部分
*依赖关系:ldap,ldap.core,ldap.support,spring-core,spring-beans,spring-context,commons-lang,commons-logging

1.3.5.org.springframework.ldap.core.simple
该包提供了部分Spring LDAP的Java5特性,主要是使用java的泛型简化开发,得到更好的context容器,更好的查询和操作方法。
?依赖关系:ldap.core

1.3.6.org.springframework.ldap.pool
该包提供了在per-ContextSource基础上的连接池配置支持。池操作支持通过PoolingContextSource包装ContextSource和池只读和读写DirContext对象。JakartaCommons-Pool提供最基本的池实现
?依赖关系:ldap.core,commons-lang,commons-pool

1.3.7.org.springframework.ldap.pool.factory
该包提供了实际池连接函数和其它创建连接函数
?依赖关系:ldap,ldap.core,ldap.pool,spring-beans,spring-txcommons-lang,commons-logging,commons-pool

1.3.8.org.springframework.ldap.pool.validation
该包提供了对池连接的验证支持
?依赖关系:ldap.pool,commons-lang,commons-logging

1.3.9.org.springframework.ldap.support
该包提供一些辅助工具函数,如异常转换等
?依赖关系:ldap,spring-core,commons-logging

1.3.10.org.springframework.ldap.authentication
该包包含了一个AuthenticationSource接口的实现,即使在没有登录的情况下,也可以用它来查询一些信息
?依赖关系:ldap.core,spring-beans,commons-lang

1.3.11.org.springframework.ldap.control
该包包含了一个DirContextProcessor的抽象接口,用来做请求控制。还有一个具体搜索分页及排序。除非使用JAVA5,LDAP Booster Pack才可以用来获得请求和控制
?依赖关系:ldap,ldap.core,LDAPboosterpack(optional),spring-core,commons-lang,
commons-logging

1.3.12.org.springframework.ldap.filter
该包提供过滤器库及一些实现
?依赖关系:ldap.core,spring-core,commons-lang

1.3.13.org.springframework.ldap.transaction.compensating
该包提供了一些LDAP-specific的核心事务实现
?依赖关系:ldap.core,transaction.compensating,spring-core,commons-lang,commons-logging

1.3.14.org.springframework.ldap.transaction.compensating.manager
该包提供了一些客户端的核心事务实现
?依赖关系:ldap,ldap.core,ldap.support,ldap.transaction.compensating,transaction.compensating,
spring-tx,spring-jdbc,spring-orm,commons-logging

1.3.15.org.springframework.ldap.transaction.compensating.support
该包提供了一些有用客户端的核心事务实现的其它函数
?依赖关系:ldap.core,ldap.transaction.compensating

具体的JAR包请从源代码包中获得

Spring Ldap支持Spring 2.0及以上版本
社区支持论坛:http://forum.springframework.org
项目主页:http://www.springframework.org/ldap

2
0
分享到:
评论

相关推荐

    spring-ldap-reference

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

    spring-security-reference.pdf

    Spring Security 是一个功能强大且可高度定制的身份验证和访问控制框架,它主要用于为Java应用程序提供安全特性。 - **历史背景** 自2004年以来,Spring Security一直在开发中,已经经历了多个版本的更新和改进...

    Spring-ladp-reference

    文档中包含了一个完整的`PersonDao`类示例,展示了如何使用Spring-LDAP来实现与LDAP服务器的交互。 ### 添加缺失的API方法 #### 实现自定义搜索方法 Spring-LDAP允许开发者扩展其功能,通过实现自定义搜索方法来...

    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 拥有一个活跃的社区,提供了丰富的文档、示例代码和技术支持。社区成员可以通过多种方式参与进来,如报告问题、贡献代码或者提出改进建议。 #### 五、示例应用程序 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