springboot整合IDAP,实现增删改查

看了网上很多资料,大多是用于查询认证。增删改很少,特在此整理一下。供大家学习。

注:前置条件,ad域证书已经导入到jdk(大家可以查看我另一篇关于ad证书导入到jdk中)

1.idea创建springboot项目我就不细说了,先导入idap依赖 

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-ldap</artifactId>
        </dependency>

2.application.yml文件配置idap基础信息

spring:
  # LDAP连接配置
  ldap:
    urls: ldaps://ip:636/
    base: OU=xxx,OU=xxx,DC=xxx,DC=xxx
    username: xxx
    password: xxx

注:636端口是ssl连接,需要证书导入,便于修改密码。如果只做用户认证端口用389即可

3.创建实体类

package com.example.idapoperation.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
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;


@Entry(objectClasses = {"user", "organizationalPerson","top","Person"})
@Data
public class LdapUser {
    @Id
    @JsonIgnore // 必写
    private Name dn;

    @Attribute(name = "distinguishedName")
    @ApiModelProperty(value = "识别名", name = "dn")
    private String distinguishedName;

    /**
     * 登录账号
     */
    @Attribute(name = "sAMAccountName")
    @ApiModelProperty(value = "登录账号", required = true, name = "loginName")
    private String loginName;

    /**
     * 正式名称,即用户姓
     */
    @Attribute(name = "cn")
    @ApiModelProperty(value = "正式名称,AD域属性值cn,需唯一,例如用工号", name = "userName")
    private String userName;

    /**
     * 姓
     */
    @Attribute(name = "sn")
    @ApiModelProperty(value = "姓", required = true, name = "sn")
    private String sn;

    /**
     * 名
     */
    @Attribute(name = "givenname")
    @ApiModelProperty(value = "名", required = true, name = "givenName")
    private String givenName;

    /**
     * 显示名称
     */
    @Attribute(name = "displayName ")
    @ApiModelProperty(value = "显示名称", required = true, name = "displayName")
    private String displayName;

    /**
     * 邮箱
     */
    @Attribute(name = "mail")
    @ApiModelProperty(value = "邮箱", required = true, name = "email")
    private String email;

    @Attribute(name = "userAccountControl")
    @ApiModelProperty(value = "用户属性", name = 
### LDAP 证书的命名规则 在LDAP环境中,证书通常用于验证客户端和服务端的身份以及加密通信。对于LDAP证书而言,其命名遵循X.509标准中的主题名称(Subject Name, SN)和发行者名称(Issuer Name, IN)。这些名称由一系列属性组成,每个属性代表特定的信息字段。 #### 主题名称 (Subject Name) 主题名称是一个区分大小写的字符串集合,包含了描述证书持有者的多个属性。常见的属性有: - **ST**:省份或州名 - **L**:城市名 - **O**:组织名 - **OU**:部门名 - **CN**:通用名,通常是域名或者服务器主机名[^1] 例如,在一个典型的LDAP环境里,如果要创建一张属于`example.com`域下的CA签发给名为`ldap.example.com`的服务使用的SSL/TLS证书,则该证书的主题可以表示为: ``` /C=US/ST=California/L=San Francisco/O=Example Inc./OU=IT Department/CN=ldap.example.com ``` #### 发行者名称 (Issuer Name) 发行者名称同样是由上述类似的属性构成,用来标识颁发此证书的认证机构(CA),这有助于建立信任链并确认证书的有效性。 #### 区分名(Distinguished Names, DNs) DNs 是一种特殊的编码方式来唯一识别对象,它不仅限于证书领域而是广泛应用于整个LDAP体系结构之中。通过这种方式能够确保在整个目录服务内不会存在两个具有相同DN的对象实例。 ```python from OpenSSL import crypto # 创建一个新的私钥 key = crypto.PKey() key.generate_key(crypto.TYPE_RSA, 2048) # 构建证书请求 req = crypto.X509Req() # 设置主体信息 subject = req.get_subject() subject.C = "US" subject.ST = "California" subject.L = "San Francisco" subject.O = "Example Inc." subject.OU = "IT Department" subject.CN = "ldap.example.com" # 将公钥加入到证书请求中 req.set_pubkey(key) req.sign(key, 'sha256') ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值