Spring LDAP

這篇文章的目的

當(dāng)然是用“最”、“最”、”最“簡單的方式來操作LDAP了。正好IBOMC項目的底層也是使用Spring LDAP的大家可以看看。

為啥要學(xué)習(xí)LDAP

鑒于中國移動使用LDAP存儲數(shù)據(jù)已經(jīng)有很長時間了導(dǎo)致過渡到Oracle很困難,公司內(nèi)的很多項目依然依賴LDAP,因此JAVA對LDAP的操作還是需要學(xué)習(xí)下的。

Srping LDAP 是什么

Spring LDAP是Spring提供的一個簡化JAVA對LDAP數(shù)據(jù)進(jìn)行操作的工具類似于Spring的JdbcTemplate。

配置

1. 引入jar包

官網(wǎng) :http://projects.spring.io/spring-ldap/
jar包的Maven地址:

<dependencies>
    <dependency>
        <groupId>org.springframework.ldap</groupId>
        <artifactId>spring-ldap-core</artifactId>
        <version>2.3.2.BUILD-SNAPSHOT</version>
    </dependency>
</dependencies><repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/libs-snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

2. 配置數(shù)據(jù)源

1. 在命名空間中增加以下描述

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:ldap="http://www.springframework.org/schema/ldap"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/ldap http://www.springframework.org/schema/ldap/spring-ldap.xsd">

2. 配置數(shù)據(jù)源

這里有個要注意的就是base的值,后續(xù)的DN(類似于文件夾中的路徑)都是基于這個的。

<ldap:context-source
    username="cn=Administrator"
    password="secret"
    url="ldap://localhost:389" 
    base="dc=boco,dc=cmcc,dc=com"
/>

<ldap:ldap-template id="ldapTemplate" context-source-ref="context-source"/>

3. 創(chuàng)建PO配置映射關(guān)系

在這個實體中
objectClasses(LDAP中每一個節(jié)點的規(guī)則,例如必填字段有哪些,選填字段有哪些,規(guī)則是可以繼承的)
base 這里的base加上前面數(shù)據(jù)源配置中的base合起來就是完整的路徑
@Id 這個是必須有的生成每個條目都有一個路徑也可以說是地址
@Attribute下面的代碼表示把createDate變量和LDAP中的createDate字段關(guān)聯(lián)起來
@Attribute(name="createDate")
private String createDate;
@Transient表示忽略該變量
@DnAttribute用于表示該變量是DN的一個參數(shù)
@DnAttribute(value="cn",index = 0)
private String cn;
這里index=3表示是DN的第四個參數(shù)倒過來的
例如:以下是一個條目的DN
cn=4028b8815eb6f10f015eb6f110f30001,ou=windows,ou=device,ou=resource

package com.boco.model.dto;

import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.DnAttribute;
import org.springframework.ldap.odm.annotations.Entry;
import org.springframework.ldap.odm.annotations.Id;

import javax.naming.Name;

/**
 * @author 黃炎
 * @Time 2017/9/18.14:12
 */
@Entry(objectClasses = {"Top", "iam-windows" ,"cmcc-windows","cmcc-device"}, base="ou=windows,ou=device,ou=resource")
public class WindowsDto extends  BaseDto {

    @Id
    private Name dn;

    public Name getDn() {
        return dn;
    }

    public void setDn(Name dn) {
        this.dn = dn;
    }

    //必填
    @Attribute(name="cn")
    @DnAttribute(value="cn",index = 3)
    private String cn;
    @Attribute(name="conType")
    private String conType;
    @Attribute(name="createDate")
    private String createDate;
    @Attribute(name="createUserKey")
    private String createUserKey;
    @Attribute(name="displayName")
    private String displayName;
    @Attribute(name="driverType")
    private String driverType;
    @Attribute(name="ip")
    private String ip;
    @Attribute(name="name")
    private String name;
    @Attribute(name="progDicKey")
    private String progDicKey;
    @Attribute(name="resourceGroupKey")
    private String resourceGroupKey;
    //選填
    @Attribute(name="adminAccount")
    private String adminAccount;
    @Attribute(name="adminPort")
    private String adminPort;
    @Attribute(name="adminPwd")
    private String adminPwd;
    @Attribute(name="desc")
    private String desc;
    @Attribute(name="manufacturer")
    private String manufacturer;
    @Attribute(name="modifyDate")
    private String modifyDate;
    @Attribute(name="modifyUserKey")
    private String modifyUserKey;
    //iam-windows                       ;
    @Attribute(name="accessPolicykey")
    private String accessPolicykey;
    @Attribute(name="accountIsoType")
    private String accountIsoType;
    @Attribute(name="adminPrompt")
    private String adminPrompt;
    @Attribute(name="areaDicKey")
    private String areaDicKey;
    @Attribute(name="bakIp")
    private String bakIp;
    @Attribute(name="conPrompt")
    private String conPrompt;
    @Attribute(name="connected")
    private String connected;

    public String getCn() {
        return cn;
    }

    public void setCn(String cn) {
        this.cn = cn;
    }

    public String getConType() {
        return conType;
    }

    public void setConType(String conType) {
        this.conType = conType;
    }

    public String getCreateDate() {
        return createDate;
    }

    public void setCreateDate(String createDate) {
        this.createDate = createDate;
    }

    public String getCreateUserKey() {
        return createUserKey;
    }

    public void setCreateUserKey(String createUserKey) {
        this.createUserKey = createUserKey;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public String getDriverType() {
        return driverType;
    }

    public void setDriverType(String driverType) {
        this.driverType = driverType;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getProgDicKey() {
        return progDicKey;
    }

    public void setProgDicKey(String progDicKey) {
        this.progDicKey = progDicKey;
    }

    public String getResourceGroupKey() {
        return resourceGroupKey;
    }

    public void setResourceGroupKey(String resourceGroupKey) {
        this.resourceGroupKey = resourceGroupKey;
    }

    public String getAdminAccount() {
        return adminAccount;
    }

    public void setAdminAccount(String adminAccount) {
        this.adminAccount = adminAccount;
    }

    public String getAdminPort() {
        return adminPort;
    }

    public void setAdminPort(String adminPort) {
        this.adminPort = adminPort;
    }

    public String getAdminPwd() {
        return adminPwd;
    }

    public void setAdminPwd(String adminPwd) {
        this.adminPwd = adminPwd;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public String getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(String modifyDate) {
        this.modifyDate = modifyDate;
    }

    public String getModifyUserKey() {
        return modifyUserKey;
    }

    public void setModifyUserKey(String modifyUserKey) {
        this.modifyUserKey = modifyUserKey;
    }

    public String getAccessPolicykey() {
        return accessPolicykey;
    }

    public void setAccessPolicykey(String accessPolicykey) {
        this.accessPolicykey = accessPolicykey;
    }

    public String getAccountIsoType() {
        return accountIsoType;
    }

    public void setAccountIsoType(String accountIsoType) {
        this.accountIsoType = accountIsoType;
    }

    public String getAdminPrompt() {
        return adminPrompt;
    }

    public void setAdminPrompt(String adminPrompt) {
        this.adminPrompt = adminPrompt;
    }

    public String getAreaDicKey() {
        return areaDicKey;
    }

    public void setAreaDicKey(String areaDicKey) {
        this.areaDicKey = areaDicKey;
    }

    public String getBakIp() {
        return bakIp;
    }

    public void setBakIp(String bakIp) {
        this.bakIp = bakIp;
    }

    public String getConPrompt() {
        return conPrompt;
    }

    public void setConPrompt(String conPrompt) {
        this.conPrompt = conPrompt;
    }

    public String getConnected() {
        return connected;
    }

    public void setConnected(String connected) {
        this.connected = connected;
    }

    public String getIamAllowConnect() {
        return iamAllowConnect;
    }

    public void setIamAllowConnect(String iamAllowConnect) {
        this.iamAllowConnect = iamAllowConnect;
    }

    public String getIamDepDomain() {
        return iamDepDomain;
    }

    public void setIamDepDomain(String iamDepDomain) {
        this.iamDepDomain = iamDepDomain;
    }

    public String getIamDevicePwdPolicyKey() {
        return iamDevicePwdPolicyKey;
    }

    public void setIamDevicePwdPolicyKey(String iamDevicePwdPolicyKey) {
        this.iamDevicePwdPolicyKey = iamDevicePwdPolicyKey;
    }

    public String getIamDeviceStatus() {
        return iamDeviceStatus;
    }

    public void setIamDeviceStatus(String iamDeviceStatus) {
        this.iamDeviceStatus = iamDeviceStatus;
    }

    public String getIamResAccountPolicy() {
        return iamResAccountPolicy;
    }

    public void setIamResAccountPolicy(String iamResAccountPolicy) {
        this.iamResAccountPolicy = iamResAccountPolicy;
    }

    public String getIamResAdminUserKey() {
        return iamResAdminUserKey;
    }

    public void setIamResAdminUserKey(String iamResAdminUserKey) {
        this.iamResAdminUserKey = iamResAdminUserKey;
    }

    public String getIamResFlag() {
        return iamResFlag;
    }

    public void setIamResFlag(String iamResFlag) {
        this.iamResFlag = iamResFlag;
    }

    public String getIamResouceVersionDicKey() {
        return iamResouceVersionDicKey;
    }

    public void setIamResouceVersionDicKey(String iamResouceVersionDicKey) {
        this.iamResouceVersionDicKey = iamResouceVersionDicKey;
    }

    public String getIamSystemType() {
        return iamSystemType;
    }

    public void setIamSystemType(String iamSystemType) {
        this.iamSystemType = iamSystemType;
    }

    public String getIamWindowsJump() {
        return iamWindowsJump;
    }

    public void setIamWindowsJump(String iamWindowsJump) {
        this.iamWindowsJump = iamWindowsJump;
    }

    public String getIpType() {
        return ipType;
    }

    public void setIpType(String ipType) {
        this.ipType = ipType;
    }

    public String getIpv4() {
        return ipv4;
    }

    public void setIpv4(String ipv4) {
        this.ipv4 = ipv4;
    }

    public String getIpv6() {
        return ipv6;
    }

    public void setIpv6(String ipv6) {
        this.ipv6 = ipv6;
    }

    public String getIsOperative() {
        return isOperative;
    }

    public void setIsOperative(String isOperative) {
        this.isOperative = isOperative;
    }

    public String getIsSudoModel() {
        return isSudoModel;
    }

    public void setIsSudoModel(String isSudoModel) {
        this.isSudoModel = isSudoModel;
    }

    public String getIsVirRes() {
        return isVirRes;
    }

    public void setIsVirRes(String isVirRes) {
        this.isVirRes = isVirRes;
    }

    public String getLogip() {
        return logip;
    }

    public void setLogip(String logip) {
        this.logip = logip;
    }

    public String getPhysicalMacIp() {
        return physicalMacIp;
    }

    public void setPhysicalMacIp(String physicalMacIp) {
        this.physicalMacIp = physicalMacIp;
    }

    public String getResStatus() {
        return resStatus;
    }

    public void setResStatus(String resStatus) {
        this.resStatus = resStatus;
    }

    public String getVirResCon() {
        return virResCon;
    }

    public void setVirResCon(String virResCon) {
        this.virResCon = virResCon;
    }

    public String getVirResCreateTime() {
        return virResCreateTime;
    }

    public void setVirResCreateTime(String virResCreateTime) {
        this.virResCreateTime = virResCreateTime;
    }

    public String getVirResCreateUser() {
        return virResCreateUser;
    }

    public void setVirResCreateUser(String virResCreateUser) {
        this.virResCreateUser = virResCreateUser;
    }

    public String getVirResDesc() {
        return virResDesc;
    }

    public void setVirResDesc(String virResDesc) {
        this.virResDesc = virResDesc;
    }

    public String getVirResId() {
        return virResId;
    }

    public void setVirResId(String virResId) {
        this.virResId = virResId;
    }

    public String getVirResTemp() {
        return virResTemp;
    }

    public void setVirResTemp(String virResTemp) {
        this.virResTemp = virResTemp;
    }

    public String getVirResTempId() {
        return virResTempId;
    }

    public void setVirResTempId(String virResTempId) {
        this.virResTempId = virResTempId;
    }

    public String getDomainDN() {
        return domainDN;
    }

    public void setDomainDN(String domainDN) {
        this.domainDN = domainDN;
    }

    public String getDomainName() {
        return domainName;
    }

    public void setDomainName(String domainName) {
        this.domainName = domainName;
    }

    private String iamAllowConnect;
    private String iamDepDomain;
    private String iamDevicePwdPolicyKey;
    private String iamDeviceStatus;
    private String iamResAccountPolicy;
    private String iamResAdminUserKey;
    private String iamResFlag;
    private String iamResouceVersionDicKey;
    private String iamSystemType;
    private String iamWindowsJump;
    private String ipType;
    private String ipv4;
    private String ipv6;
    private String isOperative;
    private String isSudoModel;
    private String isVirRes;
    private String logip;
    private String physicalMacIp;
    private String resStatus;
    private String virResCon;
    private String virResCreateTime;
    private String virResCreateUser;
    private String virResDesc;
    private String virResId;
    private String virResTemp;
    private String virResTempId;
    //cmcc-windows                      ;
    private String domainDN;
    private String domainName;
}

4.使用

LdapTemplate的調(diào)用方式和spring中其他的bean是一樣的
這里就不寫了方式很有多種。

  1. 先來個最簡單的查詢
    查找所有objectclass字段是cmcc-windows的條目
List<WindowsDto> list =  ldapTemplate.find(query().where("objectclass").is("cmcc-windows"), WindowsDto.class);
for(WindowsDto windowsDto :list){
  System.out.println(windowsDto.getIp());
}

結(jié)果:


Paste_Image.png
  1. 新增
        WindowsDto vo = new WindowsDto();
        vo.setCn(this.getSequence());
        vo.setConType("conType");
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        vo.setCreateDate(format.format(new Date()));
        vo.setCreateUserKey("huangyan");
        vo.setDisplayName("hy");
        vo.setDriverType("windows");
        vo.setIp("192.168.1.990");
        vo.setName("testEntry");
        vo.setProgDicKey("what is it");
        vo.setResourceGroupKey("測試資源組key");
        vo.setAdminAccount("huangyan");
        vo.setAdminPwd("111111");
        ldapTemplate.create(vo);
  1. 刪除
    這里cn是DN的最后一個參數(shù)
ldapTemplate.unbind("cn=4028b8815ebbcc77015ebbcc77010000");
//或者
ldapTemplate.unbind(windowsDto.getDn());
  1. 修改
ldapTemplate.update(windowsDto);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • 重要說明:本方是翻譯自https://docs.spring.io/spring-cloud-dataflow/d...
    靜悟2020閱讀 10,794評論 1 12
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,272評論 6 342
  • 背景 項目為Java Web工程,標(biāo)準(zhǔn)的后臺管理界面程序。業(yè)務(wù)上需要增加對Active Directory中組織和...
    wolfwolfgod閱讀 2,172評論 1 1
  • 目錄服務(wù)就是按照樹狀存儲信息的模式。目錄服務(wù)的數(shù)據(jù)類型主要是字符型, 而不是關(guān)系數(shù)據(jù)庫提供的整數(shù)、浮點數(shù)、日期、貨...
    黑色I(xiàn)幽默閱讀 4,434評論 0 4

友情鏈接更多精彩內(nèi)容