Spring Boot中使用LDAP来统一管理用户信息

很多时候,我们在构建系统的时候都会自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个

大家好,如果您还对Spring Boot中使用LDAP来统一管理用户信息不太了解,没有关系,今天就由本站为大家分享Spring Boot中使用LDAP来统一管理用户信息的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

LDAP(轻量级目录访问协议)实现称为目录服务的信息服务。目录服务是一种特殊的数据库系统,专门针对读取、浏览和搜索操作进行了优化。目录通常用于包含描述性的、基于属性的信息并支持复杂的过滤功能。目录通常不支持通用数据库进行大型更新操作所需的复杂事务管理或回滚策略。目录服务更新通常非常简单。这种目录可以存储各种信息,包括个人信息、Web 链接、jpeg 图像等。为了访问目录中存储的信息,需要使用LDAP,这是一种运行在TCP/IP 上的访问协议。

LDAP目录中的信息按照树形结构进行组织,具体信息存储在条目的数据结构中。条目相当于关系数据库中表中的一条记录;一个条目是一个具有专有名称DN(Distinguished Name)的属性(Attribute)。 DN 用于指代条目。 DN相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中由字段名和数据类型组成的字段(Field)。只是为了方便检索,LDAP中的Type可以有多个Value。而不是在关系数据库中,为了减少数据的冗余,实现的字段必须是不相关的。 LDAP中的条目一般是按照地理位置和组织关系来组织的,非常直观。 LDAP 将数据存储在文件中。为了提高效率,可以使用基于索引的文件数据库来代替关系数据库。类型的一个示例是邮件,其中值是电子邮件地址。

LDAP信息以树形结构存储。国家/地区(c=CN) 或域名(dc=com) 通常在树的根部定义,以及一个或多个组织(o=Acme) 或组织单位(ou=People)。组织单位可能包含所有员工、建筑物中的所有打印机等信息。此外,LDAP 支持控制条目可以且必须支持哪些属性。这是通过一个称为objectClass 的特殊属性来实现的。该属性的值决定了条目必须遵循的一些规则,这些规则指定条目可以并且至少应该包含哪些属性。例如:inetorgPerson对象类需要支持sn(姓氏)和cn(俗名)属性,但也可以包含可选属性,例如电子邮件、电话号码等。

对应的LDAP 缩写

o:organization(组织-公司) ou:组织单位(组织单位-部门) c:countryName(国家) dc:domainComponent(域名) sn:surname(姓氏) cn:common name(通用名称) 以上内容引用来自:LDAP 快速入门

入门示例

了解完LDAP的基本概念后,我们通过一个简单的例子进一步了解一下!

创建一个基本的Spring Boot 项目(如果还不知道怎么做,可以参考这两篇文章:入门1 或入门2),并在pom.xml 中引入两个重要的依赖项: groupIdorg.springframework.boot/groupId artifactIdspring -boot-starter -data-ldap/artifactId/dependencydependency groupIdcom.unboundid/groupId artifactIdunboundid-ldapsdk/artifactIdscopetest/scope/dependency 其中spring-boot-starter-data-ldap 是Spring Boot封装的LDAP自动配置的实现,基于spring-data-ldap,用于对LDAP服务器进行特定操作。

这里主要使用unboundid-ldapsdk来使用嵌入式LDAP服务器进行测试操作,所以范围设置为test。在实际应用中,我们通常会连接到真实的、独立部署的LDAP服务器,因此不需要这种依赖关系。

Spring Boot中使用LDAP来统一管理用户信息

在src/test/resources目录下创建ldap-server.ldif文件,用于存储LDAP服务器的基础数据,以供后续程序访问。 dn: dc=didispace,dc=comobjectClass: topobjectClass: 域dn: ou=people,dc=didispace,dc=comobjectclass: topobjectclass: OrganizationUnitou: peopledn: uid=ben,ou=people,dc=didispace,dc=comobjectclass: topobjectclass33 360 personobjectclass333 60 OrganizationPersonobjectclass: inetOrgPersoncn: didisn: zhaiyongchaouid: didiuserPassword: {SHA} nFCebWjxfaLbHHG1Qk5UU4trbvQ=此处创建了一个基本用户。本名翟永超,俗名迪迪。在下面的程序中,我们将读取这些信息。更多解释可以深入学习LDAP来理解,这里就不做过多解释了。

在application.properties 中添加嵌入式LDAP 配置spring.ldap.embedded.ldif=ldap-server.ldifspring.ldap.embedded.base-dn=dc=didispace,dc=com 。使用spring-data-ldap的基本用法。定义LDAP中的属性和我们Java中定义的实体以及对应的Repository@Data@Entry(base=’ou=people,dc=didispace,dc=com’, objectClasses=’inetOrgPerson’)public class Person之间的关系映射{ @Id 私有名称id; @DnAttribute(值=’uid’, 索引=3) 私有字符串uid; @Attribute(name=’cn’) 私有字符串commonName; @Attribute(name=’sn’) private String suerName; private String userPassword ;}public interface PersonRepository extends CrudRepositoryPerson, Name {}经过上面的定义,Person对象和LDAP存储内容就已经映射好了。我们只需要使用PersonRepository就可以轻松读写LDAP内容。

创建一个单元测试用例来读取所有用户信息: @RunWith(SpringRunner.class)@SpringBootTestpublic class ApplicationTests {@Autowiredprivate PersonRepository personRepository;@Testpublic void findAll() throws Exception {personRepository.findAll().forEach(p – {System. out .println(p);});}}启动测试用例后,我们可以看到控制台中输出了ldap-server.ldif中刚刚维护的用户信息:

2018-01-27 14:25:06.283 WARN 73630 — [main] o.s.ldap.odm.core.impl.ObjectMetaData : Entry 类Person 应该声明为FinalPerson(id=uid=ben,ou=people,dc=didispace,dc=com, uid=ben, commonName=didi, suerName=zhaiyongchao, userPassword=123,83,72,65,125,110,70,67,101,98,87,106,120,102,97,76,98,72,72,71,49,81,107,53, 85,85,52,116,114,98,118,81,61)添加用户

通过上面的介绍性例子,如果你能够独立完成,那么在Spring Boot中操作LDAP的基本目标就已经完成了。

如果你对Spring Data 有足够的了解,不难想象这个子项目也必须遵守Repsitory 的抽象。因此,我们可以利用上面定义的PersonRepository来轻松实现操作。例如,以下代码可以轻松地将用户添加到LDAP:

人人=new Person(); person.setUid(‘uid:1’); person.setSuerName(‘AAA’); person.setCommonName(‘aaa’); person.setUserPassword(‘123456’); personRepository.save(person) ;如果想实现更多的操作,可以参考spring-data-ldap的文档来使用。

连接到LDAP 服务器

用户评论

Spring Boot中使用LDAP来统一管理用户信息
◆残留德花瓣

一直很想把公司用户进行统一管理啊!看到这个就激动了,希望文章能够解释清楚ldap的使用步骤,我已经开始规划下一步了!

    有14位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
oО清风挽发oО

用LDAP统一管理用户信息听起来很棒,安全性更高,管理起来也更方便。不过我担心实施起来会比较复杂?

    有9位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
爱到伤肺i

现在spring boot项目越来越多,用户管理越来越麻烦,希望这个方法能有效解决问题,文章写的很透彻,感谢分享!

    有15位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
那伤。眞美

LDAP这个东西真的挺专业的,我目前用的主要还是数据库管理用户,对LDAP了解不多。这篇文章能不能简单点,帮我梳理一下Spring Boot和LDAP的结合方式?

    有11位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
念初

之前一直在自己手动维护用户信息,感觉超级蛋疼!使用LDAP统一管理确实能省下不少时间精力,这篇文章很实用!

    有12位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
半梦半醒i

LDAP这个方案确实挺好的,可以提高系统安全性,但是需要对AD架构有深入了解才能实现配置。 文章能不能详细解释一下在Spring Boot中如何配置LDAP?

    有18位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
抚笙

感觉用LDAP管理用户还是比较麻烦的,需要学习新的知识和工具,而且如果出现问题排查起来也会比较困难吧?

    有16位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
不忘初心

公司业务发展很快,用户的数量也在不断增加,手工管理实在是难以支撑。用Spring Boot来结合LDAP进行统一管理是个很好的解决方案!

    有20位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
冷嘲热讽i

这篇文章写的很棒,很详细地介绍了使用 LDAP 的优缺点和在 Spring Boot 中的应用方式。我打算尝试一下,看看能否提升我们的系统安全性。

    有18位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
你tm的滚

以前从未接触过LDAP,看了这篇文章后感到非常感兴趣。 希望可以深入了解Spring Boot中如何集成LDAP!

    有19位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
良人凉人

虽然我觉得LDAP管理用户的确有它的好处,但是我还是比较习惯目前的数据库管理方式。也许等我项目规模扩大以后再考虑试用吧!

    有15位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
南宫沐风

在多租户场景下使用 LDAP 管理用户简直太棒了!感谢作者将经验分享给大家!

    有19位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
安之若素

这篇文章很有帮助,我之前对 Spring Boot 和 LDAP 的结合知识了解不多。现在经过阅读,我对如何进行统一用户信息管理有了更清晰的认知。

    有8位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
别在我面前犯贱

LDAP这个方案听起来很复杂,而且需要对网络架构有一定的了解才能配置和维护… 感觉我暂时还没做好准备…

    有20位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
仰望幸福

Spring Boot 和 LDAP 的结合确实是一个比较好的解决方案,特别是对于大型企业来说。这篇文章介绍的很全面,让我学习到了很多新的知识!

    有11位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
微信名字

一直想用Spring Boot来开发更安全、更高效的应用程序,这篇博客文章让我看到了使用LDAP的方式,看来可以参考一下了!

    有15位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
迷路的男人

我对LDAP和 AD 的了解比较少,希望作者能提供一些入门级的配置步骤和常见问题解答,方便小白学习。

    有11位网友表示赞同!

Spring Boot中使用LDAP来统一管理用户信息
红尘烟雨

这篇文章非常实用,解决了我的很多疑惑,我已经开始尝试在自己的项目中使用 LDAP 进行用户身份验证了!

    有18位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/138790.html

(0)
小su's avatar小su
上一篇 2024年9月18日 下午4:25
下一篇 2024年9月18日 下午4:31

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注