SpringBoot 集成 LDAP
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的更多相关文章
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- hive、impala集成ldap
1.概要 1.1 环境信息 hadoop:cdh5.10 os:centos6.7 user:root hive.impala已集成sentry 1.2 访问控制权限 这里通过使用openldap来控 ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- springboot集成redis(mybatis、分布式session)
安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...
- SpringBoot集成jsp
一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...
随机推荐
- 解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器!
在当今数字化的时代,网站的流量和用户行为数据就像是一座蕴藏着无尽秘密的宝藏.而如何有效地挖掘和分析这些数据,成为了许多网站管理者和开发者头疼的问题.GoAccess,一款开源的实时Web日志分析工具, ...
- 使用 useSeoMeta 进行 SEO 配置
title: 使用 useSeoMeta 进行 SEO 配置 date: 2024/7/30 updated: 2024/7/30 author: cmdragon excerpt: 摘要:本文介绍了 ...
- 【Java】 Springboot+Vue 大文件断点续传
同事在重构老系统的项目时用到了这种大文件上传 第一篇文章是简书的这个: https://www.jianshu.com/p/b59d7dee15a6 是夏大佬写的vue-uploader组件: htt ...
- 【RabbitMQ】01 简单模式
参考自腾讯云的实验课堂,减少部署时间的折腾 1.创建Erlang.Repo库 curl -s https://packagecloud.io/install/repositories/rabbitmq ...
- 在哲学/自然科学范畴下“推理”(reason about)的类别及解释
注意,本文的解释采用Google大模型(Gemini)的答案. 翻译: 推理是运用逻辑和证据得出结论的过程.它包含批判性地思考一个主题,考虑不同的观点,以及识别事物之间的关系.以下是推理的一些方式: ...
- docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件
docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件 参考于: https://blog.csdn.net/weixin_37773766/article/detai ...
- mini_imagenet 数据集生成工具 (续)
续接前文: mini_imagenet 数据集生成工具 ============================================ 前文接受了mini_imagenet数据集的生成,但 ...
- VSCode配置git
1.背景 vscode中基础git; 前提:本地已经安装好了git 有这样的菜单,并且可以正常上传下载代码 2.步骤 步骤一:找的git的安装路径: D:\Program Files\Git 步骤二: ...
- 海豚²来了丨DolphinDB 集成 DolphinScheduler,任务调度更轻松
DolphinDB 是一款高性能时序数据库.DolphinDB 集成了功能强大的编程语言和高容量高速度的批流一体数据分析系统,为海量数据(特别是时间序列数据)的快速存储.检索.计算及分析提供一站式解决 ...
- Windows10 解决端口占用问题
netstat -ano|findStr 8080 taskkill -f -pid 8080 奥里给 秘制小汉堡安排