SpringBoot集成LDAP同步数据
1、pom引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
2、创建一个资源类LdapRepository
首先需要创建一个实体
@Data
public class LdapServer { /**
* ldap服务器
*/
@NotBlank
private String url; /**
* 端口
*/
@NotBlank
private Integer port; /**
* 基础域
*/
@NotBlank
private String baseDN; /**
* 用户名
*/
@NotBlank
private String userName; /**
* 密码
*/
@NotBlank
private String password; }
建立连接:
private LdapTemplate ldapTemplate;
/**
* 使用前必须先连接
*
* @param server
*/
public LdapRepository connect(LdapServer server) {
if(server.getUrl().contains("ldaps")){
SSLLdapContextSource contextSource = new SSLLdapContextSource();
contextSource.setUrl(server.getUrl() + ":" + server.getPort());
contextSource.setUserDn(server.getUserName());
contextSource.setPassword(server.getPassword());
contextSource.setPooled(false);
contextSource.setBase(server.getBaseDN());
contextSource.afterPropertiesSet();
contextSource.setReferral("follow");
// 设置连接超时时间 3s
Map<String, Object> envProperties = new HashMap<>();
envProperties.put("com.sun.jndi.ldap.connect.timeout", "3000");
envProperties.put("com.sun.jndi.ldap.read.timeout", "3000");
contextSource.setBaseEnvironmentProperties(envProperties);
ldapTemplate = new LdapTemplate(contextSource);
}else {
LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl(server.getUrl() + ":" + server.getPort());
contextSource.setUserDn(server.getUserName());
contextSource.setPassword(server.getPassword());
contextSource.setPooled(false);
contextSource.setBase(server.getBaseDN());
contextSource.afterPropertiesSet(); // important
contextSource.setReferral("follow");
// 设置连接超时时间 3s
Map<String,Object> envProperties = new HashMap<>();
envProperties.put("com.sun.jndi.ldap.connect.timeout","3000");
envProperties.put("com.sun.jndi.ldap.read.timeout","3000");
contextSource.setBaseEnvironmentProperties(envProperties);
ldapTemplate = new LdapTemplate(contextSource);
}
ldapTemplate.setIgnorePartialResultException(true);
return this;
}
测试认证连接:
public void authenticate(String username, String password) {
ldapTemplate.getContextSource().getContext(username, password);
}
一次查询所有人员:
/**
* 查询所有人员
*/
public List findAll(LdapQuery ldapQuery) {
List<BasicAttributes> basicAttributesList = (List) ldapTemplate.search(ldapQuery, new AttributesMapper<Object>() {
@Override
public Object mapFromAttributes(Attributes attributes) throws NamingException {
BasicAttributes basicAttributes = (BasicAttributes) attributes;
return basicAttributes;
}
});
return basicAttributesList;
}
如果数据量太大,需要使用分页查询:
public List<BasicAttributes> findAllPageNew(LdapQuery ldapQuery) {
String searchFilter = "(&(objectClass=person)(!(objectclass=computer)))";
List<BasicAttributes> attributesList = new ArrayList<>();
ldapTemplate.setIgnorePartialResultException(true);
SearchControls searchControls = new SearchControls();
/**
* 0:OBJECT_SCOPE,搜索指定的命名对象。
* 1:ONELEVEL_SCOPE,只搜索指定命名对象的一个级别,这是缺省值。
* 2:SUBTREE_SCOPE,搜索以指定命名对象为根结点的整棵树
*/
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// 每次查询条数:默认1000条
PagedResultsDirContextProcessor processor = new PagedResultsDirContextProcessor(1000);
//返回的参数
AttributesMapper CN_ATTRIBUTES_MAPPER = attributes -> {
BasicAttributes basicAttributes = (BasicAttributes) attributes;
return basicAttributes;
};
do {
List<BasicAttributes> searchList = (List) ldapTemplate.search("",
searchFilter,
searchControls,
CN_ATTRIBUTES_MAPPER,
processor);
attributesList.addAll(searchList);
} while(processor.hasMore());
return attributesList;
}
SpringBoot集成LDAP同步数据的更多相关文章
- 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索
安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...
- 流式大数据计算实践(5)----HBase使用&SpringBoot集成
一.前言 1.上文中我们搭建好了一套HBase集群环境,这一文我们学习一下HBase的基本操作和客户端API的使用 二.shell操作 先通过命令进入HBase的命令行操作 /work/soft/hb ...
- springboot集成Spring Data JPA数据查询
1.JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.它的出现主要是为 ...
- SpringBoot集成mybatis,同时读取一个数据库中多个数据表
SpringBoot集成mybatis,同时读取一个数据库中多个数据表: application.properties: mybatis.config-location=classpath:mybat ...
- springboot集成redis(mybatis、分布式session)
安装Redis请参考:<CentOS快速安装Redis> 一.springboot集成redis并实现DB与缓存同步 1.添加redis及数据库相关依赖(pom.xml) <depe ...
- SpringBoot集成Zipkin实现分布式全链路监控
目录 Zipkin 简介 Springboot 集成 Zipkin 安装启动 zipkin 版本说明 项目结构 工程端口分配 引入 Maven 依赖 配置文件.收集器的设置 编写 Controller ...
- Xxl-job安装部署以及SpringBoot集成Xxl-job使用
1.安装Xxl-job: 可以使用docker拉取镜像部署和源码编译两种方式,这里选择源码编译安装. 代码拉取地址: https://github.com/xuxueli/xxl-job/tree/2 ...
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
随机推荐
- 全排列II
全排列II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 题解 /** * @param { ...
- 责任链模式与spring容器的搭配应用
背景 有个需求,原先只涉及到一种A情况设备的筛选,每次筛选会经过多个流程,比如先a功能,a功能通过再筛选b功能,然后再筛选c功能,以此类推.现在新增了另外一种B情况的筛选,B情况同样需要A情况的筛选流 ...
- Redis能保证数据不丢失吗?
大家即使没用过Redis,也应该都听说过Redis的威名. Redis是一种Nosql类型的数据存储,全称Remote Dictionary Server,也就是远程字典服务器,用过Dictionar ...
- 【Android逆向】IDA动态调试JNI_OnLoad 和 .init_array
由于 JNI_OnLoad 和 .init_array 执行时间很早,so一加载到内存中就执行了,所以动态调试步骤会稍微要麻烦一些 1. 进入手机, 执行./android_server (如果是64 ...
- jdk17新特性梳理
jdk17新特性梳理 目录 jdk17新特性梳理 jdk8升级至jdk17新特性梳理 升级jdk17的理由 新特性梳理 可以在接口中定义私有方法,主要为了jdk8的default方法 局部变量可以使用 ...
- 【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
问题描述 如何查看App Service Java堆栈JVM相关的参数默认配置值? 问题解答 可以通过App Service的高级管理工具(kudu:)来查看JVM的相关参数,使用命令:java -X ...
- C++ 多线程笔记2 线程同步
C++ 多线程笔记2 线程同步 并发(Concurrency)和并行(Parallelism) 并发是指在单核CPU上,通过时间片轮转的方式,让多个任务看起来像是同时进行的.实际上,CPU在一个时间段 ...
- C++ //vector容器嵌套容器
1 //vector容器嵌套容器 2 #include <iostream> 3 #include <string> 4 #include<fstream> 5 # ...
- 开源:基于mybatis和jpa的数据库安全加密脱敏插件,围观交流
开源:基于mybatis和jpa的数据库安全加密脱敏插件,围观交流
- wav 格式音频文件生成例子
wavfile is a simple sound library for use in CSE 20211. This library allows you to generate arbitrar ...