最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot操作ldap全過程

 更新時(shí)間:2024年05月20日 10:30:40   作者:請(qǐng)君擇日再來(lái)  
這篇文章主要介紹了springboot操作ldap全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

以下可能不是特別深入講解,只是開發(fā)用到,淺談一下。盡量用數(shù)據(jù)庫(kù)的方式去對(duì)應(yīng)

LDAP:輕量級(jí)目錄訪問協(xié)議。

微軟的AD域,openldap之類的都可以通過LDAP協(xié)議去連接訪問。

ad(active diretory)活動(dòng)目錄;openldap就是ldap協(xié)議的具體實(shí)現(xiàn)。

在這里把他們當(dāng)成一個(gè)數(shù)據(jù)庫(kù)來(lái)看待,目錄存儲(chǔ)數(shù)據(jù)庫(kù)。

如下圖,就是openldap的層級(jí)圖。

1. 專有名詞

關(guān)于這一塊涉及到很多專有名詞這里簡(jiǎn)單談一下。

  • dc:表示域名的意思,就是一個(gè)域的名稱,可以當(dāng)成數(shù)據(jù)庫(kù)中的庫(kù)名來(lái)看待。
  • ou:組織單元,就像一層層的文件夾看待,這個(gè)ou可以有多個(gè)層級(jí),就是ou下還可以有ou,當(dāng)成數(shù)據(jù)庫(kù)中的表看待
  • cn:用戶名或服務(wù)器名。就相當(dāng)于數(shù)據(jù)庫(kù)某一行用戶信息的主鍵
  • dn:相當(dāng)于絕對(duì)路徑,由cn+ou+dc組成。如上圖alice的dn就是 cn=alice,ou=school,dc=demo,dc=com

每個(gè)用戶是有多個(gè)屬性值的,就好比數(shù)據(jù)庫(kù)中的字段,一行用戶有多個(gè)字段信息

2. springboot連接

導(dǎo)入依賴

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

application.properties配置文件。這里連接的賬戶不是ldap目錄下管理的用戶,就是別用上述的alice這種用戶去連接。

#AD認(rèn)證
spring.ldap.urls=ldap://127.0.0.1:389
spring.ldap.username=cn=admin,dc=demo,dc=com
spring.ldap.password=123456
spring.ldap.base=ou=school,dc=demo,dc=com

自定義配置類

@Configuration
public class LdapConfig {
 
    @Value("${spring.ldap.urls}")
    private String ldapUrl;
    @Value("${spring.ldap.username}")
    private String userName;
    @Value("${spring.ldap.password}")
    private String password;
    
 
    @Bean
    public LdapContextSource ldapContextSource() {
        LdapContextSource source = new LdapContextSource();
        source.setUrl(ldapUrl);
        source.setUserDn(userName);
        source.setPassword(password);
        return source;
    }
 
    @Bean
    public LdapTemplate ldapTemplate() {
        return new LdapTemplate(ldapContextSource());
    }
}

基本上如上配置就可以操作了

測(cè)試是否可以連接,直接調(diào)用接口,能成功連接就會(huì)輸出數(shù)據(jù),無(wú)法連接會(huì)出現(xiàn)認(rèn)證異常。

3. 按條件查詢

先上案例,查詢cn屬性值為alice的。這里沒有指定返回的屬性有哪些,所以返回的就是所有屬性。稍后再解釋Person和PersonMapper

Person就是一個(gè)普通實(shí)體類,就像平時(shí)查詢數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí)都是用實(shí)體類接收數(shù)據(jù)

@Data
public class Person {
    private String cn;
    private String displayName;
    private String givenName;
    private String eMail;
    private String ou;
}

PersonMapper類就不一樣了,必須繼承AttributesMapper類,實(shí)現(xiàn)mapFromAttributes方法。

當(dāng)ldapTemplate通過條件篩選出數(shù)據(jù)時(shí),一行數(shù)據(jù)就會(huì)調(diào)用一次這個(gè)方法,attributes帶有查出的屬性值

@Slf4j
public class PersonMapper implements AttributesMapper<Person> {
 
    @Override
    public Person mapFromAttributes(Attributes attributes) throws NamingException {
        log.info(attributes.toString());
        Person result = new Person();
        result.setCn(attributes.get("cn").get().toString());
        return result;
    }
}

篩選方式有很多,必須有篩選條件才能查詢。

加上attributes(new String[]{"cn", "mail"}),就只會(huì)查詢出這兩個(gè)屬性值

LdapQuery query = LdapQueryBuilder.query()
                .base(base)
                .searchScope(SearchScope.SUBTREE)
                .attributes(new String[]{"cn", "mail"})
                .where("cn")
                .is("alice");

可以用filter篩選,也是cn屬性值為alice的篩選條件。

LdapQuery query = LdapQueryBuilder.query()
                .base(base)
                .searchScope(SearchScope.SUBTREE)
                .filter("(cn=alice)");

base下所有內(nèi)容帶有objectClass屬性,都會(huì)被查出來(lái)。

如果base自身也帶有,自身也會(huì)被查出來(lái)

LdapQuery query = LdapQueryBuilder.query()
                .base(base)
                .searchScope(SearchScope.SUBTREE)
                .filter("(objectClass=*)");

多條件篩選,cn為alice并且mail為123@qq.com的內(nèi)容。

LdapQuery query = LdapQueryBuilder.query()
                .base(base)
                .searchScope(SearchScope.SUBTREE)
                .filter("(&(cn=alice)(mail=123@qq.com))");

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作示例

    Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作,結(jié)合實(shí)例形式詳細(xì)分析了spring使用注解實(shí)現(xiàn)聲明式事務(wù)相關(guān)配置、接口實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2020-01-01
  • 從入門到超神進(jìn)階的Netty群聊系統(tǒng)

    從入門到超神進(jìn)階的Netty群聊系統(tǒng)

    本篇文章基于Netty做一個(gè)聊天室案例加強(qiáng)Netty的熟練度,案例的效果是服務(wù)端可以廣播某客戶端的消息給所有客戶端。每個(gè)客戶端監(jiān)聽鍵盤輸入來(lái)獲取消息,然后發(fā)送給服務(wù)端
    2021-08-08
  • 一文詳解Java中的原子操作

    一文詳解Java中的原子操作

    在Java中,原子操作尤為重要,尤其是在多線程環(huán)境中,想象一下,如果小黑在操作一個(gè)共享變量時(shí),這個(gè)操作被其他線程打斷,那會(huì)發(fā)生什么?可能會(huì)導(dǎo)致數(shù)據(jù)不一致,或者更糟糕的情況,本文將給大家詳細(xì)介紹一下Java中的原子操作
    2024-01-01
  • 使用webservice自定義注解處理參數(shù)加解密問題

    使用webservice自定義注解處理參數(shù)加解密問題

    這篇文章主要介紹了使用webservice自定義注解處理參數(shù)加解密問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Reactor中的onErrorContinue?和?onErrorResume

    Reactor中的onErrorContinue?和?onErrorResume

    這篇文章主要介紹了Reactor中的onErrorContinue?和?onErrorResume,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • 如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用

    如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用

    這篇文章主要介紹了如何使用Sentry 監(jiān)控你的Spring Boot應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 基于hashmap 的擴(kuò)容和樹形化全面分析

    基于hashmap 的擴(kuò)容和樹形化全面分析

    這篇文章主要介紹了hashmap 的擴(kuò)容和樹形化的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java流處理stream使用詳解

    Java流處理stream使用詳解

    Java8的另一大亮點(diǎn)Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關(guān)于Java8中Stream詳細(xì)使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • idea快捷鍵生成getter和setter,有構(gòu)造參數(shù),無(wú)構(gòu)造參數(shù),重寫toString方式

    idea快捷鍵生成getter和setter,有構(gòu)造參數(shù),無(wú)構(gòu)造參數(shù),重寫toString方式

    這篇文章主要介紹了java之idea快捷鍵生成getter和setter,有構(gòu)造參數(shù),無(wú)構(gòu)造參數(shù),重寫toString方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 深入理解Java設(shè)計(jì)模式之備忘錄模式

    深入理解Java設(shè)計(jì)模式之備忘錄模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之備忘錄模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11

最新評(píng)論

郁南县| 镇沅| 金沙县| 黔西县| 高邑县| 旺苍县| 台东市| 阿荣旗| 启东市| 新乡市| 韩城市| 北川| 雷波县| 施秉县| 连山| 启东市| 淳安县| 吴川市| 隆子县| 江城| 浏阳市| 台山市| 区。| 扎鲁特旗| 宁强县| 施甸县| 蕉岭县| 旬邑县| 山丹县| 曲水县| 右玉县| 呼图壁县| 杭锦后旗| 喜德县| 涟水县| 成安县| 通许县| 沙坪坝区| 桓台县| 桂东县| 汉川市|