ldap 组织结构如何转成多叉树?

简介: 工作中,ldap 服务器的对接,可以能会涉及到同步组织结构,认证,认证后处理等等,最近认证还不是我想写的刚需,继续来看看对于组织结构的想法

工作中,ldap 服务器的对接,可以能会涉及到同步组织结构,认证,认证后处理等等,最近认证还不是我想写的刚需,继续来看看对于组织结构的想法

例如同步 AD 域的组织结构,或者是 ldap 协议的其他产品对应的企业组织结构,如下我简单的创建的一些 ou 和 cn

image.png

查看当前 ldap 组织结构

我们通过命令查看 ldap 服务器上的组织结构数据,咱们只查看 DN 即可,不需要其他的属性

shell

复制代码

# ldapsearch -x -LLL -b dc=xiaomotong,dc=com objectClass=* d:

image.png

我们可以看到,ldap 服务器给我们返回的数据中,是 1 个 list ,这个list 里面每 1 个元素是 1 个 entry,是 1 条记录,也是 1 个唯一的标识

那么问题就很明确了,如何将上述的 dn list ,转成 1 棵树呢?

我们可以根据上述打印结果画图,进行分析一下

先画一棵树

根据上面的打印结果,在和实际ldap admin 可视化工具中可以看出,根实际是在最后 dc=xiaomotong,dc=com,然后从右往左 分别是 ou,cn

前 5 条数据对应画出来的图是这样的:

image.png

看上去有戏,继续往下画看看效果:

  • 红色框为 ou
  • 绿色框为 dc
  • 蓝色框为 cn

image.png

对就是这样的一棵树,画出来了,可是我们如何用代码实现一下呢?

编码实现

编码实现将 ldif 格式的数据转成树,并用 json 的方式输出,查看效果

实现方式

1、遍历每一条 entry

2、处理每一条 entry 的时候,从右到左获取相应的 rdn(对应的键和值),并给每一个 rdn 创建一个 多叉树的 节点

3、basedn 对应的节点 和 每一个 ou 对应的节点地址,存放到一个 map(key 是 string,value 是节点的地址) 中便于后续遍历处理其他 entry 的时候,直接通过 ou 名字获取对应节点地址即可

4、对于一个节点下面的用户,直接挂到这个节点上即可

画个图来阐述一下 map 的作用:

例如我们需要画一个组织结构,先画根节点

image.png

现在我们要遍历对应的 entry,例如:

  • cn=B,dc=A
  • ou=C,dc=A
  • ou=D,dc=A

需要画上 B,C,D ,我们分别创建好对应的节点,但是如何挂到 A上面去的呢?这个时候,是不是就需要 A 的地址了,正好这个 entry 又能获取到 A 的名字,也就是 map 的key,这样子,我们就可以获取到 A 的地址了

image.png

继续解析 entry

  • ou=E,ou=C,dc=A
  • cn=F,ou=E,ou=C,dc=A

原理同上

image.png

通过上面的简图,算是可以将 ldap 的 ldif 格式的数据,转换成我们想要的树了,思路是有了,编码的话就很快了 具体编码可以看下一篇

学习所得,如有偏差,还请不吝赐教


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
消息中间件 开发者 微服务
构建高效代码:模块化设计原则的实践与思考
【2月更文挑战第14天】在软件开发的世界中,编写可维护、可扩展且高效的代码是每个开发者追求的目标。本文将探讨如何通过应用模块化设计原则来提升代码质量,分享一些实践中的经验教训以及对未来技术趋势的思考。
296 1
|
存储 自然语言处理 算法
高维向量压缩方法IVFPQ :通过创建索引加速矢量搜索
向量相似性搜索是从特定嵌入空间中的给定向量列表中找到相似的向量。它能有效地从大型数据集中检索相关信息,在各个领域和应用中发挥着至关重要的作用。
618 0
|
存储 应用服务中间件 调度
在StatefulSet中使用LocalVolume存储卷保持节点一致
StatefulSet是一种有状态服务,其存储卷的使用有多种方式: 使用共享存储,这时在模板中定义一个volume卷,可以给多个pod共享; 每个pod配置独立的存储卷,使用非共享存储(块存储)时需要这样配置,通过配置volumeClaimTemplates实现; 对于StatefulSet使...
4983 0
小功能⭐️Unity中利用材质自发光实现物体闪烁效果
小功能⭐️Unity中利用材质自发光实现物体闪烁效果
|
11月前
|
安全 NoSQL 关系型数据库
阿里云数据库:构建高性能与安全的数据管理系统
在企业数字化转型过程中,数据库是支撑企业业务运转的核心。随着数据量的急剧增长和数据处理需求的不断增加,企业需要一个既能提供高性能又能保障数据安全的数据库解决方案。阿里云数据库产品为企业提供了一站式的数据管理服务,涵盖关系型、非关系型、内存数据库等多种类型,帮助企业构建高效的数据基础设施。
536 2
|
11月前
|
XML 缓存 Java
Spring FactoryBean 的常见使用场景总结
FactoryBean 是 Spring 框架中的一个重要接口,用于自定义 Bean 的创建逻辑。常见使用场景包括: 1. **复杂 Bean 的创建**:如数据源配置。 2. **延迟实例化**:按需创建资源密集型对象。 3. **动态代理**:为 Bean 创建 AOP 代理。 4. **自定义配置**:根据特定配置创建 Bean。 5. **第三方库集成**:利用 FactoryBean 封装外部库的创建过程。
246 0
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
246 3
|
Kubernetes 安全 网络协议
操作系统的未来之路:探索微内核架构与分布式系统
随着计算需求的不断演变和技术的快速进步,传统的宏内核操作系统正面临性能和安全性的挑战。本文旨在探讨操作系统的未来发展道路,特别是微内核架构和分布式系统在提升性能和安全性方面的潜力。通过分析微内核设计的优势、分布式系统的特性以及两者结合的可能性,文章旨在为读者提供对操作系统未来发展趋势的深入理解。
382 0
|
计算机视觉
OpenCV-尺寸调整cv::resize
OpenCV-尺寸调整cv::resize
180 0