真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

LDAP舉例分析

這篇文章主要講解了“LDAP舉例分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“LDAP舉例分析”吧!

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、治多ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的治多網(wǎng)站制作公司

LDAP初探

首先要先理解什么是LDAP,當(dāng)時我看了很多解釋,也是云里霧里,弄不清楚。在這里給大家稍微捋一捋。 首先LDAP是一種通訊協(xié)議,LDAP支持TCP/IP。協(xié)議就是標(biāo)準(zhǔn),并且是抽象的。在這套標(biāo)準(zhǔn)下,AD(Active Directory)是微軟出的一套實(shí)現(xiàn)。 那AD是什么呢?暫且把它理解成是個數(shù)據(jù)庫。也有很多人直接把LDAP說成數(shù)據(jù)庫(可以把LDAP理解成存儲數(shù)據(jù)的數(shù)據(jù)庫)。像是其他數(shù)據(jù)庫一樣,LDAP也是有client端和server端。server端是用來存放資源,client端用來操作增刪改查等操作。 而我們通常說的LDAP是指運(yùn)行這個數(shù)據(jù)庫的服務(wù)器。 可以簡單理解AD =LDAP服務(wù)器+LDAP應(yīng)用。

那LDAP這種數(shù)據(jù)庫有什么特殊的呢?

我們知道,像MySQL數(shù)據(jù)庫,數(shù)據(jù)都是按記錄一條條記錄存在表中。而LDAP數(shù)據(jù)庫,是樹結(jié)構(gòu)的,數(shù)據(jù)存儲在葉子節(jié)點(diǎn)上。看看下面的比喻:

假設(shè)你要樹上的一個蘋果(一條記錄),你怎么告訴園丁它的位置呢?當(dāng)然首先要說明是哪一棵樹(dc,相當(dāng)于MYSQL的DB),然后是從樹根到那個蘋果所經(jīng)過的所有“分叉”(ou),最后就是這個蘋果的名字(uid,相當(dāng)于MySQL表主鍵id)。好了!這時我們可以清晰的指明這個蘋果的位置了,就是那棵“歪脖樹”的東邊那個分叉上的靠西邊那個分叉的再靠北邊的分叉上的半紅半綠的……,暈了!你直接爬上去吧!

就這樣就可以描述清楚“樹結(jié)構(gòu)”上的一條記錄了。 說一下LDAP里如何定義一個記錄的位置吧。

樹(dc=ljheee) 分叉(ou=bei,ou=xi,ou= dong) 蘋果(cn=redApple)

好了,redApple的位置出來了: dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=ljheee 其中dn標(biāo)識一條記錄,描述了一條數(shù)據(jù)的詳細(xì)路徑。 咦!有人疑問,為什么ou會有多個值?你想想,從樹根到達(dá)蘋果的位置,可能要經(jīng)過好幾個樹杈,所有ou可能有多個值。關(guān)于dn后面一長串,分別是cn,ou,dc;中間用逗號隔開。

總結(jié)一下LDAP樹形數(shù)據(jù)庫如下: dn :一條記錄的詳細(xì)位置 dc :一條記錄所屬區(qū)域 (哪一顆樹) ou :一條記錄所屬組織 (哪一個分支) cn/uid:一條記錄的名字/ID (哪一個蘋果名字) LDAP目錄樹的最頂部就是根,也就是所謂的“基準(zhǔn)DN"。

為什么要用LDAP目錄樹來存儲數(shù)據(jù),用MySQL不行嗎,為什么非要搞出一個樹形的數(shù)據(jù)庫呢? 這是因?yàn)橛脴湫谓Y(jié)構(gòu)存儲數(shù)據(jù),查詢效率更高(具體為什么,可以看一下關(guān)系型數(shù)據(jù)庫索引的實(shí)現(xiàn)原理——B樹/B+樹)。在某些特定的場景下,使用樹形數(shù)據(jù)庫更理想。比如:需要儲存大量的數(shù)據(jù),而且數(shù)據(jù)不是經(jīng)常更改,需要很快速的查找。 把它與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫相比,LDAP除了快速查找的特點(diǎn),它還有很多的運(yùn)用場景,比如域驗(yàn)證等。

LDAP編程操作

我們可以用JDBC操作MySQL數(shù)據(jù)庫,進(jìn)行對數(shù)據(jù)的增刪改查。同樣,LDAP樹形數(shù)據(jù)庫,也可以通過JDBC方式;除此之外,還可以用JNDI的方式(更推薦),因?yàn)闃湫慰梢钥醋鍪悄夸?,樹結(jié)構(gòu)的枝杈相當(dāng)于目錄的層級。

還有LDAP數(shù)據(jù)庫展示數(shù)據(jù)也是樹形的,可以把ApacheDirectoryStudio看做是連接數(shù)據(jù)庫服務(wù)器的界面化的client,相當(dāng)于Navicat、WorkBench。新建連接,連接數(shù)據(jù)庫服務(wù)器的操作類似。 

JNDI連接LDAP服務(wù)器

import org.springframework.beans.factory.annotation.Autowired;
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class LdapJNDI {

@Autowired
LdapConfiguration ldapConfiguration;

public void JNDILookup() {
    String rootFilter = "o=cvte.com,o=isp";
//        String filter = "(&(smart-type=E1)(smart-status=1))";
    String filter = "(&(smart-type=E1)(uid=00012047))";
    String username = "uid=USER_NAME,ou=Authorization,ou=People,o=cc.com,o=isp";//xxx為申請的對接賬戶
    String password = "PASSW";

    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");//設(shè)置連接LDAP的實(shí)現(xiàn)工廠
    env.put(Context.PROVIDER_URL, "ldap://172.26.39.77:389/" + rootFilter);// 指定LDAP服務(wù)器的主機(jī)名和端口號
    env.put(Context.SECURITY_AUTHENTICATION, "simple");//給環(huán)境提供認(rèn)證方法,有SIMPLE、SSL/TLS和SASL
    env.put(Context.SECURITY_PRINCIPAL, username);//指定進(jìn)入的目錄識別名DN
    env.put(Context.SECURITY_CREDENTIALS, password); //進(jìn)入的目錄密碼
    env.put("filter",filter);
    DirContext ctx = null;

    try {
        // 得到初始目錄環(huán)境的一個引用
        ctx = new InitialDirContext(env);

        //The search base entry 'uid=00012047,ou=Internal,ou=People,o=cvte.com,o=isp' does not exist]; remaining name 'uid=00012047,ou=Internal'
//            Attributes attrs = ctx.getAttributes("uid=00012047,ou=Internal,ou=People");//獲取到一個人員,


        NamingEnumeration bindings = ctx.listBindings("ou=Internal,ou=People");//列舉 內(nèi)部人員

        while (bindings.hasMore()) {
            Binding bd = (Binding)bindings.next();
            System.out.println(bd.getName() + ": " + bd.getObject());
        }


         /*根據(jù)結(jié)點(diǎn)的DN來查找它的所有屬性, 然后再從屬性中得到所有的值,注意一個屬性可以有多個值*/
//            for (NamingEnumeration ae = attrs.getAll(); ae.hasMore(); ) {
//                //獲取一個屬性
//                Attribute attr = (Attribute) ae.next();
//                for (NamingEnumeration ve = attr.getAll(); ve.hasMore(); ) {
//                   System.out.println(String.format("Attribute=%s,Value=%s",attr.getID(),ve.next()) );
//                }
//            }

    } catch (javax.naming.AuthenticationException e) {
        System.out.println("認(rèn)證失敗");
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("認(rèn)證出錯:");
        e.printStackTrace();
    }finally {
        if (ctx != null) {
            try {
                ctx.close();
            } catch (NamingException e) {
                e.printStackTrace();
            }
        }
    }

}

public static void main(String[] args) {
    LdapJNDI ldapJNDI = new LdapJNDI();
    ldapJNDI.JNDILookup();

}

感謝各位的閱讀,以上就是“LDAP舉例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對LDAP舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!


當(dāng)前文章:LDAP舉例分析
轉(zhuǎn)載來于:http://weahome.cn/article/jhgdeg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部