当前位置:   article > 正文

Spring Boot集成OpenLdap 进行权限验证_springbootldap登陆

springbootldap登陆

一、搭建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、用户实体

  1. /**
  2. * 注解属性对应 ldap 协议中的属性名称 objectClasses 查询 ldap协议中 objectClasses 为 inetOrgPerson 的账号
  3. */
  4. @Entry(objectClasses = {"inetOrgPerson"})
  5. @Data
  6. public class Person {
  7. @Id
  8. @JsonIgnore // 必写
  9. private Name distinguishedName;
  10. @Attribute(name = "cn")
  11. private String cn;
  12. @Attribute(name = "mail")
  13. private String mail;
  14. @Attribute(name = "gidNumber")
  15. private Integer gidNumber;
  16. @Attribute(name = "homeDirectory")
  17. private String homeDirectory;
  18. @Attribute(name = "sn")
  19. private String sn;
  20. @Attribute(name = "uidNumber")
  21. private Integer uidNumber;
  22. @Attribute(name = "sAMAccountName")
  23. private String loginName;
  24. @Attribute(name = "uid")
  25. private String uid;
  26. @Attribute(name = "givenName")
  27. private String givenName;
  28. }

2、查找用户

  1. /**
  2. * 集成 ldap协议 实现用户认证
  3. *
  4. * @author java
  5. */
  6. @Slf4j
  7. @Component
  8. public class LdapUtil {
  9. @Autowired
  10. private LdapTemplate ldapTemplate;
  11. public Person findUser(String userName, String password) {
  12. // 根据uid 和密码 查询用户是否存在
  13. log.info("---findUser---userName--" + userName + "password:" + password);
  14. Person person = null;
  15. EqualsFilter filter = new EqualsFilter("uid", userName);
  16. boolean bool = ldapTemplate.authenticate("", filter.toString(), password);
  17. if (bool) {
  18. // 构建查询条件
  19. LdapQueryBuilder builder = LdapQueryBuilder.query();
  20. // 根据 uid查询
  21. builder.where("uid").is(userName);
  22. // 注意person 类,一定要跟 ldap协议中的属性名称对应
  23. person = ldapTemplate.findOne(builder, Person.class);
  24. //加打印日志
  25. log.info("person:" + JsonUtil.toJsonString(person));
  26. } else {
  27. log.info("未查询到用户");
  28. }
  29. return person;
  30. }
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46168
推荐阅读
相关标签
  

闽ICP备14008679号