【总结】Spring LDAP整理

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

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

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


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


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

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

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


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

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

[b]4. 怎样理解Autherntication[/b]
要验证一个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);


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


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


[b]【总结】[/b]
在使用Spring ldap的一年多时间里,没有碰到太过复杂的问题,产品上线后表现也很稳定。总得来说因为跟大家都熟悉的JdbcTemplate思想上有些相似,所以学习起来成本也不高。
SpringLDAP目录服务:LdapTemplate与LDAP操作 Spring LDAP为开发者提供了一个强大且灵活的框架,简化了与LDAP目录服务的交互。通过LdapTemplate,开发者可以轻松执行各种LDAP操作,而无需深入了解底层JNDI API的复杂性。对象-目录映射功能让LDAP条目与Java对象的转换变得简单直观,提高了代码的可读性和可维护性。与Spring Security的集成使得实现基于LDAP的身份验证和授权变得轻而易举。在企业应用中,特别是需要集中式用户管理的场景下,Spring LDAP是一个理想的选择。 阅读详情

相关推荐

豆包 OAuth2.0 完整教程(核心原理+四种授权模式+SpringBoot实战+和LDAP联动)

是一个开放的、轻量级的授权协议允许第三方应用在「不获取用户的账号密码」的前提下,获取用户在某平台的「有限权限」资源。OAuth2.0 是授权协议,不是认证协议;是行业标准,所有大厂(微信、支付宝、GitHub、Google)的第三方登录,底层全是OAuth2.0。OAuth2.0 有哪四种授权模式?分别适用什么场景?→ 上文已整理,按「授权码>密码>客户端凭证>简化」回答即可。OAuth2.0 和 JWT 的区别?→ OAuth2.0是协议,JWT是令牌的一种格式;

m0_37843156的博客 1314

Spring使用LdapTemplate进行LDAP操作

这里写目录标题LDAP基本概念示例代码常见问题1. LDAP基本概念2. 示例代码3. 常见问题3.1 ObjectSid,objectGUID乱码3.2 Java采用SSL连接AD域连接出错问题simple bind failed:IP:PORT解决方案3.3 添加,修改数组类型的AD属性3.4 javax.naming.CommunicationException:simple bind faild3.5 Spring's LdapTemplate search: PartialResultExcept

XSemperFI的博客 8110

LdapTemplate-开源

简化 LDAP 操作的 Java 框架,基于 Spring 的 JdbcTemplate 模式。 减轻用户查找和关闭上下文、循环命名枚举、编码/解码值和过滤器等的负担。

LDAP的介绍以及JAVA使用LdapTemplate来进行AD域的操作

AD是Active Directory的缩写,AD是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据来解决域控这个具体问题,只是AD顺便还提供了用户接口,也可以利用ActiveDirectory当做LDAP服务器存放一些自己的东西而已。比如LDAP是关系型数据库,微软自己在库中建立了几个表,每个表都定义好了字段。显然这些表和字段都是根据微软自己的需求定制的,而不是LDAP协议的规定。

damokelisijian866的博客 3892

如何用Python实现SPEI指数计算?从数据准备到结果可视化完整指南

本文提供了一份完整的Python实现SPEI指数计算指南,涵盖从数据准备、潜在蒸散量计算到结果可视化的全流程。详细介绍了使用Thornthwaite方法计算PET、拟合三参数log-logistic分布以及标准化转换的核心算法,并提供了模块化代码和可视化方案,帮助用户构建可复用的干旱分析工具。

cola5的博客 267

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 226

SpringMVC + Ldap 整合,LdapTemplate使用

一、什么是LDAP? LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。 目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。 目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。 LDAP目录服务是由目录数据库和一套访问协议...

zhua.er的博客 5892

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 230

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

Grafana图像渲染插件安装全攻略:解决依赖缺失问题(附完整命令清单)

本文详细介绍了在CentOS/RHEL环境下安装Grafana图像渲染插件`grafana-image-renderer`的全过程,包括解决常见的依赖缺失问题。通过提供完整的命令清单和疑难问题排查指南,帮助用户高效部署和优化插件性能,确保图像渲染功能稳定运行。

weixin_30399821的博客 84

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 536

LDAP查询数据(JAVA)

文章目录 前言 一、LDAP是什么? 二、使用JAVA连接LDAP 1.引入工具类 2.读入数据 总结 前言 公司让从ldap中查询对应得数据,去验证用户得信息,以前没接触过ldap,找了找网上其他人写得也不太全,经过几天得研究整理最后完成了,特写下这个方便自己以后来看 提示:以下是本篇文章正文内容,下面案例可供参考 一、LDAP是什么? 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。 首先LDAP是一种通讯协议.....

起名有深意的博客 7433

AD(十四)调用已有的PCB元件封装库

软件:Altium Designer 16 需要资料:已有的PCB原理图文件(.PCBDOC)或者PCB库文件(.PCBLIB)(来源文中细说) 调用已有的PCB元件封装库(一)从已有的PCB原理图文件(*.PCBDOC)中调用1、PCB原理图文件来源2、打开已有的PCB原理图文件(*.PCBDOC)3、生成PCB封装库4、复制封装到工程文件下的PCB库文件(*.PCBLIB)5、重名问题(二)从已有的PCB库文件(*.PCBLIB)中调用1、PCB库文件(*.PCBLIB)的来源2、打开已有的PCB库 (

Curnane0_0的博客 5082

Spring LDAP连接异常解决

private static final LdapTemplate template; static { LdapContextSource cs = new LdapContextSource(); cs.setUrl("ldap://172.18.254.210:389"); cs.setBase("DC=hans,DC=com")

u011992073的博客 4030

RT-DETR目标检测模型性能评价指标详解,涉及混淆矩阵、F1-Score、IoU、mAP、参数量、计算量等,一文打尽所有评价指标

本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。

Limiiiing的博客 3357

30.Labview如何读懂别人程序、修改程序?

之前写过一次教大家的文章,这次教大家如何学习别人的程序,和如何搭建一套适合自己的程序框架。这里事先说明一下:要想搭好程序框架,一定要先把自己的系统,逻辑是什么!这非常重要,是决定你程序的关键因素。废话不多扯,直接说重点。

关注我,更多技术问题欢迎私聊~ 2445

**Spring LDAP 1.3.1** 是 Spring LDAP 项目的一个维护版本,专注于修复和改进现有功能

是一个稳定且功能丰富的版本,通过修复已知问题、改进性能和增强兼容性,为开发者提供了更强大的工具来集成和管理 LDAP 服务器。如果您正在使用 Spring LDAP,建议升级到该版本以获得最新的修复和改进。更多详细信息,可以参考Spring LDAP 官方文档。

[Blog][Domain] programb.blog.youkuaiyun.com 601

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Boot中使用LDAP来统一管理用户信息,2024年最新实战java高并发程序设计第二版

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了《Java中高级核心知识全面解析》小米商场项目实战,别再担心面试没有实战项目:一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!心面试没有实战项目:**

2401_84138785的博客 1434

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

spring security 功能整理

开发者应结合具体场景选择合适的模块,遵循最小权限原则,并通过持续监控和更新依赖库确保系统安全。处理 HTTP 请求,每个过滤器负责特定安全任务。:自动启用默认安全配置(如表单登录、基础安全头)。:集成数据库、LDAP、OAuth2 等(通过。:通过 ACL 或行级权限控制数据访问。支持自定义认证方式(如短信验证码)。:存储安全上下文(如用户认证信息)。:处理 HTTP Basic 认证。:通过 URL 匹配规则控制访问(:最终决定是否允许访问资源。)实现业务逻辑权限校验。实现非阻塞安全控制。

LCY133的博客 1079

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring Boot 2

笔者已经把面试题和答案整理成了面试专题文档!必看视频!获取2024年最新Java开发全套学习资料 备注Java[外链图片转存中…(img-OWQ6EeQt-1716356317882)][外链图片转存中…(img-fFBwik77-1716356317882)][外链图片转存中…(img-P0hu8pzr-1716356317883)][外链图片转存中…(img-Zj3v2RfC-1716356317883)][外链图片转存中…(img-Rrz5GF1r-1716356317883)]

2401_85191067的博客 1089

spring相关技术整理

这是spring官网上的项目列表 下面是其中部分说明: spring 顶级项目:  Spring AMQP:消息队列操作的工具包,主要是封装了RabbitMQ的操作。  Spring Batch:批处理框架,或说是批量任务执行管理器,功能包括任务调度、日志记录/跟踪等。  Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式w

baochanghong的专栏 1878

Spring Security 3.0整理之我见—对整体结构的把握

Core 支持单独运行的应用, 远程客户端,方法(服务层)安全和JDBC用户供应。 Web Spring Security Web认证服务和基于URL的权限控制 LDAP LDAP认证和实现代码,如果你需要使用LDAP认证或管理LDAP用户实体就是必须的。 ACL 用来提供安全给特定的领域对象实例 CAS 整合一个CAS单点登录服务器 OpenID 用来认证用户,通过一个外部的OpenI...

jiangwt100的专栏 181

基于Spring的包含特定注解bean的package扫描工具

本文参考Spring框架中的AnnotationSessionFactoryBean源码,改造了一个包扫描器。能够在指定的package下扫描带有特定注解的Bean。用于增加Spring配置的灵活性。

Slash Youth - Jack Chai 2万+
上一篇: 【总结】Quartz整理
下一篇: 【翻译】运用MapReduce找到社交媒体中的共同朋友
angelbill3
博客等级 码龄18年 3粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值