`
angelbill3
  • 浏览: 255580 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

【总结】Spring LDAP整理

 
阅读更多
如果要总结Spring的LDAP(Spring开发的操作LDAP的开源Jar),必须要从LDAP说起。

LDAP:Lightweight Directory Access Protocol,翻译过来是轻量级目录访问协议。
它是基于X.500标准的(X.500:构成全球分布式名录系统的协议),说的这么抽象基本上理解不了,只需要知道是一种协议,以目录的形式(结构树)来管理资原(用户、用户组、地址簿、邮件用户等)。一些大公司会选择以LDAP来存储用户及其信息。

所以就像是数据库一般,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。


1. LDAP:Schema
在LDAP中目录是按照树型结构组织——目录信息树(DIT)
directory information tree (DIT).
DIT由(Entry)组成,条目相当于关系数据库中表的记录;
条目是具有分辨名DN(Distinguished  Name)的属性-值对(Attribute-value)的集合。(DN相当于关系型数据库表中的主键Primary key)
关于LDAP的基础要学习的还有很多,比如客户端的安装、数据模型的学习等等。


2. Spring LDAP
Spring LDAP就是基于JAVA开发的LDAP客户端开源工具,主要用来操用LDAP,其实现方法有点类似Spring JdbcTemplate(这个大家都非常熟悉了~)

支持Transaction (事务)
支持Pooling (连接池)

官网:http://www.springframework.org/ldap
官方文档及例子(重要):http://docs.spring.io/spring-ldap/docs/2.1.0.RELEASE/reference/
JAVA文档(重要):http://docs.spring.io/spring-ldap/docs/2.1.0.RELEASE/apidocs/
GitHub(大量例子):https://github.com/spring-projects/spring-ldap


3. 核心类:LdapTemplate
这个类非常类似Spring JdbcTemplate,JdbcTemplate的实现是通过传入sql语句和RowMapper,query返回目标列表,或是传入sql和参数,执行update方法。JdbcTemplate的优点是简化了与数据库连接的代码(实现了ldap属性到对象的映射,使得代码更为简单和优雅),以及避免了一些常见的错误。(这个开源已经更新到4+版本了,可见其应用之广)。

优点都是相通的,Spring LdapTemplate的优点是简化了与LDAP交互的代码(传统的类详见:
http://docs.oracle.com/javase/7/docs/api/javax/naming/directory/package-summary.html)以及避免了一些常见的错误。

4. 怎样理解Autherntication
要验证一个LDAP的Entry的身份(有点类似于用户名、密码登陆),LDAP的思路是通过DN搜索到目标Entry(例如一个公司员工),那么再通过这个Entry和password来验证合法性。
具体的业务比如是:一个员工要登陆公司网站,输入他的员工号和密码。我们是不能通过查询在LDAP里拿到用户的密码(安全性的限制),那么只能传入实际的密码,让LDAP server端验证合法性。

ldapTemplate.authenticate(LdapQuery query, String password);

在使用这个方法的时候曾经遇到过一个问题,如下:
调用ldapTemplate.authenticate时验证老是通不过(always return false),经查文档发现:如果ldap连接是有连接池的话,那么总是调用已创建好的连接去验证,这样是错误的。Authenticate的验证过程需要ContextSource通过传入的待验证的用户名和密码来重新绑定生成一个连接,也就是说这个方法要使用到的connection连接并不能是连接池里的那个connection。

所以需要new一个LdapContextSource类和LdapTemplate类,再通过LdapTemplate类的setContextSource(ContextSource contextSource)将持有用户名密码的ContextSource传入。

注意:在contextSource创建后,需要调用afterPropertiesSet()方法来验证所有必要的参数都已经set了(特指url、用户名、密码等),这个方法执行后,真正的contextSource才会被实例化。(特别是在Spring context上下文之外的配置中,必须要执行该方法。

这么说好像很抽象,具体代码如下:
LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl(url);
contextSource.setUserDn(userDn);
contextSource.setPassword(userPwd);
contextSource.setPooled(false);
contextSource.afterPropertiesSet(); // important

LdapTemplate template = new LdapTemplate();
template.setContextSource(contextSource);

Boolean result = template.authenticate(LDAP_BASE_DN, filter, pwd);


5. Pooling
Spring LDAP的pool用的是apache commons pool(http://commons.apache.org/proper/commons-pool/index.html


6. 通过SSL的认证方式连接
这块公司是用IBM的portal来安装的SSL,所以对于tomcat的配置并不是很了解。可以在stack-overflow上看看相关资料。


【总结】
在使用Spring ldap的一年多时间里,没有碰到太过复杂的问题,产品上线后表现也很稳定。总得来说因为跟大家都熟悉的JdbcTemplate思想上有些相似,所以学习起来成本也不高。
分享到:
评论
2 楼 qingtingchen 2018-11-01  
请问下如果只有uid/emial 和密码的话要怎样进行认证
1 楼 hu3625067 2016-08-29  
楼主写的很精辟,言简意赅,非常实用

相关推荐

    Spring LDAP API(Spring LDAP 开发文档).CHM

    Spring LDAP。 官网 Spring LDAP API。 Spring LDAP 开发文档。

    [Spring] Spring LDAP 实践开发 (英文版)

    Practical Spring LDAP is your guide to developing Java-based enterprise applications using the Spring LDAP Framework. This book explains the purpose and fundamental concepts of LDAP before giving a ...

    Spring LDAP 简单使用

    **Spring LDAP 简介** Spring LDAP 是一个用于简化Java应用程序与LDAP(轻量级目录访问协议)交互的框架。它构建在Spring框架之上,提供了一种声明式的方式来处理 LDAP 查询,使得开发者能够更容易地集成LDAP服务到...

    spring ldap 1.3.0下载

    Spring LDAP 是一个强大的Java库,它为开发人员提供了一个简单且直观的接口,用于与LDAP(轻量级目录访问协议)服务器进行交互。在本文中,我们将深入探讨Spring LDAP 1.3.0版本,包括它的特点、用途、安装过程以及...

    Spring LDAP

    **Spring LDAP 深度解析** Spring LDAP 是一个开源框架,它为Java开发者提供了一种在Spring应用中操作LDAP(轻量级目录访问协议)的简单方式。该框架结合了Spring的强大功能和LDAP的目录服务,使得开发人员可以更加...

    spring-ldap1.3.1

    Spring LDAP 是一个强大的Java框架,专门设计用于简化与 Lightweight Directory Access Protocol (LDAP) 服务器的交互。在"spring-ldap1.3.1"版本中,这个框架提供了一个灵活且直观的API,允许开发者轻松地执行对...

    spring ldap的使用

    标题与描述中的关键词“spring ldap的使用”指向的是在Spring框架下集成轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP)的相关知识。Spring LDAP是Spring框架的一部分,它提供了一种简单的...

    使用 Spring LDAP 读取数据并映射到 Java Bean 中

    在Spring LDAP的项目中,我们需要添加Spring LDAP和相关Spring库的依赖,例如`spring-context`、`spring-ldap-core`和`spring-ldap-odm`等。这些库提供了对LDAP操作的支持,包括连接管理、查询构建和数据映射。 ...

    spring ldap操作(一)目录测试环境搭建

    在本篇博客“spring ldap操作(一)目录测试环境搭建”中,我们将深入探讨如何在Java应用程序中使用Spring LDAP框架来操作LDAP(轻量级目录访问协议)服务器,以及如何搭建一个测试环境来验证和调试相关功能。Spring...

    SpringLdapDemo

    学习SpringSecurity时,看到LDAP认证,不了解LDAP根本无从下手。所以转头学习了一下LDAP,搭建了一个DEMO,仅作记录。 LDAP(Lightweight Directory Access Protocol) 轻量级目录访问协议,LDAP目录以树状的层次结构...

    springldap例子

    在IT行业中,Spring LDAP是一个非常重要的框架,它允许开发者利用Spring框架的强大功能来与 Lightweight Directory Access Protocol (LDAP) 服务器进行交互。这个"springldap例子"可能是为了展示如何配置和使用...

    SpringLDAP和JNDI的增删改查

    **Spring LDAP与JNDI:增删改查详解** 在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级...

    基于springldap的增删改查以及验证

    总结,Spring LDAP提供了全面的工具集,使开发人员能够轻松地在Java应用中集成和操作LDAP目录服务。通过`LdapTemplate`进行CRUD操作,结合Spring Security的`LdapAuthenticationProvider`进行用户验证,可以构建安全...

    Practical Spring LDAP英文原版

    《Practical Spring LDAP》是一本面向中级Java开发者的专业书籍,专注于使用Spring LDAP框架构建企业级应用程序。Spring LDAP是Spring框架的一个扩展,旨在简化Java与 Lightweight Directory Access Protocol (LDAP)...

    Spring 初步实现LDAP 域认证

    在本文中,我们将探讨如何使用Spring框架来实现LDAP(轻量级目录访问协议)域认证。这是一项重要的技术,特别是对于那些希望集中管理和验证多个应用系统账号密码的企业而言。通过集成Spring与LDAP,我们可以实现一个...

    spring-ldap demo

    Spring LDAP 是一个基于 Spring 框架的 LDAP(轻量级目录访问协议)客户端库,它简化了在 Java 应用程序中与 LDAP 服务器的交互。本示例项目 "spring-ldap demo" 提供了一个关于如何使用 Spring LDAP 进行实际操作的...

    spring_ldap

    ### Spring LDAP:深入理解与应用 #### 概述 Spring LDAP 是一个强大的工具包,用于在基于 Spring 的应用程序中简化 LDAP(轻量级目录访问协议)的集成与操作。它提供了一系列灵活且易于使用的 API,使得开发人员...

    对LDAP的基本操作(Spring-ldap)+Ext实现显示LDAP的树状结构

    rar包:一个Web工程, 主要有,利用Spring-ldap对LDAP的基本操作(查询,增删改);Extjs实现的对Ldap的树状结构的显示,结构有点类似Softerra LDAP;一个测试类。 pdf:spring-ldap-reference.pdf Extjs.pdf ...

    Spring Data LDAP API(Spring Data LDAP 开发文档).CHM

    Spring Data LDAP API。 Spring Data LDAP 开发文档。 官网 Spring Data LDAP API。

    spring-Ldap

    **Spring-Ldap 深度解析** Spring-Ldap 是一个基于 Spring 框架的 LDAP(轻量级目录访问协议)开发工具包,它为在 Java 应用中使用 LDAP 提供了强大的支持。这个项目是为了简化 LDAP 数据的集成,提供了一种与 ...

Global site tag (gtag.js) - Google Analytics