Centos7安装部署openLDAP并springboot集成openLDAP

news2024/9/29 19:21:33

这里安装部署都是基于docker的,供参考
安装docker

1、yum list docker
2、yum install -y yum-utils device-mapper-persistent-data lvm2
3、yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
5、systemctl start docker

开始安装LDAP
备注:这里openldap、phpldapadmin版本是20.10.3

1、docker pull osixia/openldap
2、docker pull osixia/phpldapadmin

验证:

[root@host1 ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
osixia/phpldapadmin   latest    dbb580facde3   21 months ago   309MB
osixia/openldap       latest    31d1d6e16394   21 months ago   257MB

3、启动ldap

docker run -p 389:389 -p 636:636 --name ldap --env LDAP_ORGANISATION="testldap" --env LDAP_DOMAIN="testldap.com" --env LDAP_ADMIN_PASSWORD="hello" --detach osixia/openldap

4、看一下是否启动成功

[root@host1 ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                 CREATED          STATUS         PORTS                                                                          NAMES
d0ab3bfc144f   osixia/openldap   "/container/tool/run"   10 seconds ago   Up 9 seconds   0.0.0.0:389->389/tcp, :::389->389/tcp, 0.0.0.0:636->636/tcp, :::636->636/tcp   ldap

5、启动phpLdapAdmin 连到该LDAP,这里IP就是ldap服务所在的主机IP,这里其实就是本机localhost

docker run -d --privileged -p 9991:80 --name phpLdapAdmin --env PHPLDAPADMIN_HTTPS=false --env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.9 --detach osixia/phpldapadmin

6、看一下是否启动成功

[root@host1 ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                 CREATED         STATUS         PORTS                                                                          NAMES
89f123bb9db0   osixia/phpldapadmin   "/container/tool/run"   7 seconds ago   Up 6 seconds   443/tcp, 0.0.0.0:9991->80/tcp, :::9991->80/tcp                                 phpLdapAdmin
d0ab3bfc144f   osixia/openldap       "/container/tool/run"   3 minutes ago   Up 3 minutes   0.0.0.0:389->389/tcp, :::389->389/tcp, 0.0.0.0:636->636/tcp, :::636->636/tcp   ldap

开始使用
1、登录网页
http://192.168.1.9:9991/
IP即phpLdapAdmin服务所在主机IP,port即我们启动该服务时的映射端口
在这里插入图片描述
2、登录
在这里插入图片描述
这里DN和密码是启动dlap 时env设置的,没有设置的话有个默认的。
3、登录后如图
在这里插入图片描述
4、点击Create a child entry创建组织提交
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、选择左侧创建的组织,再点击Create a child entry创建一个组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、选择左侧ou=Baidu下cn=user,点击create a child entry,创建账号提交
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7、提交后可以看到我们创建的账号
在这里插入图片描述

springboot 集成openLDAP

1、maven依赖

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-ldap -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-ldap</artifactId>
            <version>3.0.0</version>
        </dependency>

2、yml配置

spring:
  ldap:
    urls: 'ldap://192.168.1.9:389'
    username: 'cn=admin,dc=testldap,dc=com'
    password: 'helloa'
    #注意这里配置base后,添加用户时,DN(Distinguished Name)不需要再追加,否则会报LDAP: error code 32 - No Such Object
    base: 'dc=testldap,dc=com'

3、代码部分
LdapService

package com.h.service;

import com.h.dto.ldap.Person;

import java.util.List;

/**
 * @author R
 * @date 11:41 2022/12/2
 * @description
 */
public interface LdapService {
    Person getLdapUser(String uid);
    boolean authenticate(String uid, String password);
    Person addLdapUser(Person person);
    void updateLdapUser(Person person);
    void deleteLdapUser(Person person);
    List<Person> getAll();
}

LdapServiceImpl

package com.h.service.impl;

import com.h.dto.ldap.Person;
import com.h.service.LdapService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.filter.EqualsFilter;
import org.springframework.ldap.query.LdapQuery;
import org.springframework.stereotype.Service;

import java.util.List;

import static org.springframework.ldap.query.LdapQueryBuilder.query;

/**
 * @author R
 * @date 11:42 2022/12/2
 * @description
 */
@Service
@Slf4j
public class LdapServiceImpl implements LdapService {
    @Autowired
    private LdapTemplate ldapTemplate;

    @Override
    public Person getLdapUser(String uid) {
        LdapQuery query = query().where("uid").is(uid);
        try {
            return ldapTemplate.findOne(query, Person.class);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public boolean authenticate(String uid, String password) {
        EqualsFilter filter = new EqualsFilter("uid", uid);
        return ldapTemplate.authenticate("", filter.toString(), password);
    }

    @Override
    public Person addLdapUser(Person person) {
        ldapTemplate.create(person);
        log.info("添加用户成功,name={}", person.getCn());
        return person;
    }

    @Override
    public void updateLdapUser(Person person) {
        ldapTemplate.update(person);
        log.info("更新用户成功,name={}", person.getCn());
    }

    @Override
    public void deleteLdapUser(Person person) {
        ldapTemplate.delete(person);
        log.info("删除用户成功,name={}", person.getCn());
    }

    @Override
    public List<Person> getAllUser() {
        return ldapTemplate.findAll(Person.class);
    }
}

LdapController

package com.h.controller;

import com.h.common.RestPage;
import com.h.common.RestResult;
import com.h.dto.ldap.Person;
import com.h.service.LdapService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.ldap.support.LdapUtils;
import org.springframework.web.bind.annotation.*;

import javax.naming.ldap.LdapName;
import java.util.List;

/**
 * @author R
 * @date 11:26 2022/12/2
 * @description
 */
@Api(tags = "LDAP")
@RestController
@RequestMapping("/hi")
public class LdapController {

    @Autowired
    LdapService ldapService;

    @ApiOperation(value = "LDAP查询列表", notes = "LDAP查询列表")
    @GetMapping("/ldap")
    public ResponseEntity<RestResult> getFunRequest() {
        List<Person> personList = ldapService.getAll();

        return ResponseEntity.ok().body(RestResult.success(RestPage.transformPage(personList)));
    }

    @ApiOperation(value = "LDAP添加用户", notes = "LDAP添加用户")
    @PostMapping("/ldap")
    public ResponseEntity<RestResult> addUser(@RequestBody Person person) {
        person.setSn(person.getUid());
        person.setCn(person.getUid());
        person.setGidNumber(500);
        person.setUidNumber(1002);// 需调整

        LdapName ldapName = LdapUtils.newLdapName("cn= rrr,cn=user,ou=Baidu"); // 需调整
        person.setDistinguishedName(ldapName);
        ldapService.addLdapUser(person);
        return ResponseEntity.ok().body(RestResult.success());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

斐波那契数列的矩阵乘法方法

1、求斐波那契数列矩阵乘法的方法 1.1 斐波那契数列的线性求解&#xff08;O(n)O(n)O(n)&#xff09;的方法 //斐波那契数列&#xff1a;1 1 2 3 5 8 ... int fibonacci(int n) {if (n < 1) return 0;if (n 1 || n 2) return 1;int a 1, b 1, c 0;for (int i 3; i &…

K_A08_002 基于 STM32等单片机驱动MAX1508模块按键控制直流电机正反转加减速启停

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 3、驱动说明 MAX1508模块驱动时序 对应程序: PWM信号 四、部分代码说明 接线说明 1、STC89C52RCMAX1508模块 2、STM32F103C8T6MAX1508模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七、项目…

[附源码]计算机毕业设计springboot校园生活服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

PowerBI工作区连接Log Aanlytics

其实在2021.6月的时候微软已经更新了该功能&#xff0c;通过PowerBI高级容量工作区连接Log Analytics工作区&#xff0c;从而分析历史活动数据。并且在应用市场创建了一个模板应用方便分析日志数据。使用该模板可以&#xff1a; • 观察历史使用趋势 • 按照范围、容量、数据集…

常用通讯电平转换电路整理

常用通讯电平转换电路整理5V转3.3V 当5V端信号为低电平时&#xff0c;R4不导通&#xff0c;Q5基极高电平&#xff0c;Q5导通&#xff0c;Q5的集电极被拉低&#xff0c;3.3V端被拉低。R6在Q5导通时起到限流作用。 优势&#xff1a; 便宜&#xff1a;三极管容易常见并且容易采购&…

LOLBins免杀技术研究及样本分析

一、前言 自病毒木马诞生起&#xff0c;杀毒软件与病毒木马的斗争一直都没有停止过。从特征码查杀&#xff0c;到现在的人工智能查杀&#xff0c;杀毒软件的查杀技术也是越来越复杂。但是病毒木马却仍然层出不&#xff0c;这是因为大部分病毒木马使用了免杀技术。 免杀技术全称…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校教师工作量的核算的设计与实现g6ipj

大学计算机专业毕业的&#xff0c;实际上到了毕业的时候&#xff0c;基本属于会与不会之间。说会&#xff0c;是因为学了整套的理论和方法&#xff0c;就是所谓的科班出身。说不会&#xff0c;是因为实践能力极差。 不会的问题&#xff0c;集中体现在毕设的时候&#xff0c;系…

2023年天津天狮学院专升本市场营销专业《市场营销学》考试大纲

2023年天津天狮学院高职升本市场营销专业入学考试《市场营销学》考试大纲一、考试性质 《市场营销学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《市场营销学》…

【图像分割】DeepLabV3+

文章目录0. 介绍1. DeepLabV32. 结论3. 参考0. 介绍 DeepLabV3文章&#xff1a;https://arxiv.org/pdf/1802.02611.pdf DeepLabV3代码&#xff1a;https://github.com/VainF/DeepLabV3Plus-Pytorch 语义分割的两个主要问题&#xff1a; 物体的多尺度问题。多次下采样会造成特…

ABAP 计算时间差

源码 FUNCTION zfm_date_difference. *“---------------------------------------------------------------------- "“本地接口&#xff1a; *” IMPORTING *” VALUE(IV_DATE_BEG) TYPE SY-DATUM *" VALUE(IV_TIME_BEG) TYPE SY-UZEIT *" VALUE(IV_DATE_END)…

【赛后总结】第十三届服务外包创新创业大赛总结——A14

目录前言组队&#xff06;选题分工&项目推进提交材料&项目答辩区域赛初赛区域赛决赛全国总决赛写在最后前言 先摆两个参赛视频 初赛视频 决赛视频 比赛已经过去几个月了&#xff0c;也算是想起来这个比赛可以写一个总结了。在历时8个月左右的时间之后&#xff0c;我们…

香菇多糖-四甲基罗丹明 Lentinan-TRITC 四甲基罗丹明-PEG-香菇多糖

香菇多糖-四甲基罗丹明 Lentinan-TRITC 四甲基罗丹明-PEG-香菇多糖 中文名称&#xff1a;香菇多糖-四甲基罗丹明 英文名称&#xff1a;Lentinan-TRITC 别称&#xff1a;生物素修饰香菇多糖&#xff0c;生物素-香菇多糖 香菇多糖-聚乙二醇-四甲基罗丹明 TRITC-PEG-Lent…

[附源码]计算机毕业设计JAVA校园新闻管理系统

[附源码]计算机毕业设计JAVA校园新闻管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

带你走进脚本世界,ijkplayer之【init-ios.sh】脚本分析

前言 集成ijkplayer&#xff0c;需要执行脚本init-ios.sh&#xff0c;那么init-ios.sh脚本干嘛用的了,花了半天时间&#xff0c;学习了下shell脚本&#xff0c;感觉脚本语言学起来还是比较容易上手的&#xff0c;现在仅仅能看懂了&#xff0c;但是要自己写&#xff0c;还需要花…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校学生社团管理系统n4pcu

要开始我们毕业设计的第一步的关键就是选好我们的课题&#xff0c;有的同学开始选题的时候想着按照传统的课题延续下去&#xff0c;在设计题目时&#xff0c;不要过于笼统广泛&#xff0c;选择题目其实并不难&#xff0c;要多从自身的角度出发&#xff0c;要结合你们当前所处的…

VTK网格细分-vtkAdaptiveSubdivisionFilter

欢迎大家加入社区&#xff0c;雪易VTK社区-CSDN社区云 前言&#xff1a;此博文主要分享VTK中关于细分网格的相关Filter&#xff0c;同时希望能给其他小伙伴一些帮助。 小结&#xff1a;VTK中关于网格细分的Filter包括vtkSubdivisionFilter和vtkAdaptiveSubdivisionFilter。其…

【服务器数据恢复】EMC Unity存储误操作删除数据卷的数据恢复案例

服务器数据恢复环境&#xff1a; EMC Unity某型号存储&#xff1b; 存储设备连接的2台硬盘柜上共创建2组独立的POOL&#xff1b; 2组POOL共包含21块520字节的硬盘。 服务器故障&检测&#xff1a; 误操作删除了2组POOL上的部分数据卷&#xff0c;和用户沟通后得知有5个数据…

Linux学习记录——사 权限与工具

目录的权限 想要进入一个目录&#xff0c;必须有x权限。对于目录来讲&#xff0c;r权限代表着可以查看当前目录下的文件名属性&#xff0c;w权限代表着可以在该目录下创建新文件。 默认权限 现在创建一个目录和文件 创建普通文件时&#xff08;不包括可执行&#xff09;&…

冬天这么冷,到底要不要坚持送孩子入托?

进入初冬&#xff0c;天气转凉&#xff0c;很多家长担心宝宝着凉感冒&#xff0c;不送孩子去托班了&#xff0c;甚至干脆不带孩子出门。 事实上&#xff0c;无论从幼儿身体健康发育的角度&#xff0c;还是心理发展的层面&#xff0c;这种做法都是极不科学的。 看看下面这些理由…

[Java]图论详解(内附详细代码)

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.图的基本概念 2.图的存储结构 2.1 邻接矩阵…