赞
踩
一、搭建openldap
搭建openldap可以有多种方式进行:
1、可以去官网下载源码包,自行编译,安装。
2、可以使用docker进行安装。
这边主要介绍使用docker安装openldap.
参考文章:https://blog.csdn.net/qq_39361915/article/details/124006692
二、使用openldap配置组织和用户
参考文章:https://www.cnblogs.com/xiaomifeng0510/p/9564688.html
1、进入登录界面进行登录

2、在跟域名下面,创建子对象。选择Organisational Unit

3、在刚刚创建的ou=org域名下,选择Posix Group创建具体组织

4、在跟组织下,创建Organisational Unit,创建user节点,用于用户账户的创建

5、在ou=users目录下创建具体的用户

6、 在创建用户的时候,可以关联组织,创建组织的时候,可以关联已有的用户。
三、Spring boot集成openldap
maven依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-ldap</artifactId> </dependency>
openldap配置:
spring
ldap:
# ldap 服务
urls: 'ldap://192.168.0.88:389'
# ldap 管理员账号
username: 'cn=admin,dc=testldap,dc=com'
password: 123456
# ldap 根目录
base: 'dc=testldap,dc=com'
代码中使用Openldap的api
1、用户实体
- /**
- * 注解属性对应 ldap 协议中的属性名称 objectClasses 查询 ldap协议中 objectClasses 为 inetOrgPerson 的账号
- */
- @Entry(objectClasses = {"inetOrgPerson"})
- @Data
- public class Person {
-
- @Id
- @JsonIgnore // 必写
- private Name distinguishedName;
-
- @Attribute(name = "cn")
- private String cn;
-
- @Attribute(name = "mail")
- private String mail;
-
- @Attribute(name = "gidNumber")
- private Integer gidNumber;
-
- @Attribute(name = "homeDirectory")
- private String homeDirectory;
-
- @Attribute(name = "sn")
- private String sn;
-
- @Attribute(name = "uidNumber")
- private Integer uidNumber;
-
- @Attribute(name = "sAMAccountName")
- private String loginName;
-
- @Attribute(name = "uid")
- private String uid;
-
- @Attribute(name = "givenName")
- private String givenName;
-
- }

2、查找用户
- /**
- * 集成 ldap协议 实现用户认证
- *
- * @author java
- */
- @Slf4j
- @Component
- public class LdapUtil {
-
- @Autowired
- private LdapTemplate ldapTemplate;
-
- public Person findUser(String userName, String password) {
- // 根据uid 和密码 查询用户是否存在
- log.info("---findUser---userName--" + userName + "password:" + password);
- Person person = null;
- EqualsFilter filter = new EqualsFilter("uid", userName);
- boolean bool = ldapTemplate.authenticate("", filter.toString(), password);
- if (bool) {
- // 构建查询条件
- LdapQueryBuilder builder = LdapQueryBuilder.query();
- // 根据 uid查询
- builder.where("uid").is(userName);
- // 注意person 类,一定要跟 ldap协议中的属性名称对应
- person = ldapTemplate.findOne(builder, Person.class);
- //加打印日志
- log.info("person:" + JsonUtil.toJsonString(person));
- } else {
- log.info("未查询到用户");
- }
- return person;
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。