LDAP协议具体是什么可以自行查看,简单来说就是单点登录的一种实现方式

LDAP只是一种协议,实现的有 openLDAP ,Microsoft active directory 等

openLDAP部署

本文主要采用openLDAP部署,正常参考以下两篇文章即可部署完成

[LDAP部署卸载问题解决]([Openldap从安装到卸载 | textworld | Hugo Blog](https://www.textworld.cn/post/20201-08-03-openlad从安装到卸载/#:~:text=接着教大家怎么卸载openldap %24 systemctl stop slapd %24 systemctl disable,userdel ldap %23 删除openldap目录 %24 rm -rf %2Fetc%2Fopenldap))

[LDAP部署](2020年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程 - 知乎 (zhihu.com))

openLDAP 可视化

采用 docker 部署 phpldapadmin,改下端口号映射和IP即可

docker run -d --privileged -p 9090:80 --name myphpldapadmin \
--env PHPLDAPADMIN_HTTPS=false --env PHPLDAPADMIN_LDAP_HOSTS=192.168.10.7 \
--detach osixia/phpldapadmin

访问

http://192.168.10.7:9090

以上完成后会看到如下页面

重点:

此处账号其实为部署时的 cn=Manager,dc=ricman,dc=localhost

密码就是你设置的密码

创建LDAP账号





看这个创建好的账号,下文的 person 类的 @Entry(objectClasses = {"inetOrgPerson"}) 查询的就是 objectClasses 为 inetOrgPerson 的账号,也可添加其他两个条件

看属性后面凡是带有 alias 的 ,点点看前面的属性名称有惊喜哦

以 User Name 举例,它在ldap中的字段名称其实是 uid 对应下文person类的 @Attribute(name = "uid")

SpringBoot 集成 LDAP

 <!-- LDAP集成 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
spring:
ldap:
# ldap 服务
urls: 'ldap://192.168.10.7:389'
# ldap 管理员账号
username: 'cn=Manager,dc=ricman,dc=localhost'
password: 123456
# ldap 根目录
base: 'dc=ricman,dc=localhost'

一定要注意这个 Person类


import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.Entry;
import org.springframework.ldap.odm.annotations.Id; import javax.naming.Name; /**
* 注解属性对应 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; }

查询

package com.service.single.example.ldap;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.filter.EqualsFilter;
import org.springframework.ldap.query.LdapQueryBuilder;
import org.springframework.stereotype.Service; import java.util.List; /**
* 集成 ldap协议 实现用户认证
*/
@Slf4j
@Service
public class LdapService { @Autowired
private LdapTemplate ldapTemplate; public void test() {
// 根据uid 和密码 查询用户是否存在
EqualsFilter filter = new EqualsFilter("uid", "test1");
boolean bool = ldapTemplate.authenticate("", filter.toString(), "123456");
if (bool) {
// 构建查询条件
LdapQueryBuilder builder = LdapQueryBuilder.query();
// 根据 uid查询
builder.where("uid").is("test1");
// 注意person 类,一定要跟 ldap协议中的属性名称对应
Person person = ldapTemplate.findOne(builder, Person.class);
System.out.println(JSON.toJSONString(person));
} else {
System.out.println("校验失败");
}
} public void test1() {
// 查询 所有用户,注意 person类查询条件
List<Person> ps = ldapTemplate.findAll(Person.class);
if (ps.size() > 0) {
System.out.println(JSON.toJSONString(ps));
}
}
}

SpringBoot 集成 LDAP的更多相关文章

  1. 【springBoot】springBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  2. hive、impala集成ldap

    1.概要 1.1 环境信息 hadoop:cdh5.10 os:centos6.7 user:root hive.impala已集成sentry 1.2 访问控制权限 这里通过使用openldap来控 ...

  3. SpringBoot集成security

    本文就SpringBoot集成Security的使用步骤做出解释说明.

  4. springboot集成Actuator

    Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...

  5. SpringBoot集成Shiro并用MongoDB做Session存储

    之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...

  6. SpringBoot集成redis的key,value序列化的相关问题

    使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...

  7. springboot集成mybatis(二)

    上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...

  8. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

  9. springboot集成redis(mybatis、分布式session)

    安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...

  10. SpringBoot集成jsp

    一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...

随机推荐

  1. C#开源、简单易用的Dapper扩展类库 - Dommel

    前言 今天大姚给大家分享一个C#开源(MIT License).免费.简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel. 项目特性 Dommel ...

  2. c++ 中遇到的语法问题

    在头文件中给函数赋值 如这样: func(int a,int b = 1); 在.cpp文件中不能同时这样写,否则会报错,只能这样写func(int a,int b ),所以从其他地方移植的代码需要注 ...

  3. ArcGIS for Android入门(Java):ViewPage + Fragment 底部导航栏添加地图

    修改为ViewPage + Fragment 可以参考里面runoob的教程:我也是参考这个修改的:这前面的网上都有很多相应的教程,我觉得这一部分的难点主要是在Fragment里面加载地图: 在fra ...

  4. 【Maven】下载安装(Linux)

    Maven官网下载地址: http://maven.apache.org/download.cgi 点选这个压缩包 wget或者上传都行 解压 tar -zxvf apache-maven-3.6.3 ...

  5. 【Vue】Re20 VueX 第一部分(共享数据,Getters)

    一.概述 专门为VueJS应用程序开发的状态管理模式 集中式存储管理应用的所有组件的状态,按照相应的规则保证状态以一种可预测的方式发生变化 VueX也集成到了官方调试工具devtools extens ...

  6. python绘图库matplotlib:画线的标志marker的设置——类型/size/空心/边线颜色及大小/显示marker超出边界部分

    如题,最近有绘图的工作,要求就是使用python绘图库来画线并打上坐标点的标志,这时候就遇到了问题,这个线上的标志如果是实心的话就难以有区分度,但是设置为空心就需要考虑标志的边线粗细等问题,于是便有了 ...

  7. 一群伪专家讨论“motherland”和“fatherland”,说说个人的观点

    看了一个视频: 中国的文化里在找妈,美国的文化里在找爸!如何真正教育子女? ============================================= ================ ...

  8. 如何修复ubuntu的uefi启动——如何将Ubuntu安装入移动硬盘中

    交代一下使用场景,个人平时经常使用Ubuntu系统,由于不喜欢总在一个地方呆但是来回搬电脑又不是十分的方便,于是想到了一个好的方案,那就是把Ubuntu系统安装到移动硬盘中,这样不论是在家还是在实验室 ...

  9. springboot整合validation统一参数检查

    1.背景 实际开发中对参数进行检查,是常见 比如如下代码 /** * 参数检查测试(传统做法) * * @param dto * @return */ @GetMapping("/param ...

  10. 控制台报IPV6问题的解决

    IPv6问题调试 Burp Suite是不支持IPv6地址进行数据通信的,这时在cmd控制台里就会抛出如下异常 java.net.SocketException: Permission denied ...