LDAP&それは実装です

LDAP入門

まず、あなたは、私が説明するために多くのことを読んで、LDAPが何であるかを理解するために持っているだけでなく、霧、明確ではありません。ここではあなたのストロークの小さなストロークを指示します。
まず、LDAPプロトコルで、LDAPは、TCP / IPをサポートしています。本契約は、標準、および抽象的です。この規格では、AD(アクティブディレクトリ)は、Microsoftが達成するために着手しています。
ADそれは何ですか?時間のために、データベースとして理解されます。多くの人々は、LDAPデータベース(LDAPは、データを格納するためのデータベースとして理解することができる)に直接言います。他のデータベースと同様に、のような、LDAPは、クライアント側とサーバ側を持っています。サーバ側のリソースは、クライアントCRUD操作を動作させるために、格納するために使用されています。
そして、我々は通常、LDAPサーバは、データベースの実行を参照していることを言います。
AD = LDAPは単に+ LDAPサーバーアプリケーションを理解することができます。

LDAPデータベース何それ、それ、この特別な?

私たちは、レコードがテーブルに存在することにより、MySQLデータベースのように、データが記録されている、ということを知っています。LDAPデータベース、ツリー構造、リーフノードに格納されたデータ。以下のアナロジーを考えてみます。


どのようにあなたが庭師にその場所を教えてください、あなたはリンゴの木(記録)したいと仮定?もちろん、我々は最初のリンゴへのルートから、その後、(MYSQL DBに相当DC)の木が何であるかを説明しなければならない、これはと同等のAppleの姓(UID、であるすべての「フォーク」(OU)を介して、 MySQLのテーブルの主キーID)。まあ!この時点で、私たちは木の北のフォークに......赤と緑の分岐部の西側であり、その後によるりんごの位置を、明示することができ、分岐の「ワイボーツリー」東、めまい!あなたは登るために直接行きます!

だから、レコードは明確に「木」に記述することができます。
それの記録位置を定義する方法についてLDAPの話。
ツリー(DC = ljheee)
分岐(OU = BEI、OU = XI 、OU =ドン)
、アップル(CN = redApple)

さて、redApple位置アウト:
DN:CN = honglv、BEI OU =、OU = XI、OU =ドン、DC = ljheee
レコード、詳細に記述されたデータ・パスを識別するDNを特徴とします。
OUは複数の値を持っている理由ねえ!一部の人々が疑問?すべてのOUには複数の値を持つことができ、それはいくつかの枝を取ることが、Appleの位置に到達すること根から、それについて考えてみよう。コンマで区切られ; DNの長いリストの背面に、それぞれDC、OU、CN。
次のようにLDAPツリーデータベースの要約:
DNは:レコードの位置の詳細
DCは:記録領域が(ツリーれる)属する
レコードが(どのブランチ)組織に属している:OUは
CN / UID:名/ IDを記録する(これリンゴ名)
最上部には、LDAPディレクトリツリー、いわゆる「ベースDN」のルートです。


それをしないだろう、MySQLとのデータを格納するためのLDAPディレクトリツリーを使用して、なぜ、なぜ私たちはツリーデータベースを考え出す必要がありますか?
データは、ツリー構造、より高いクエリ効率を使用して格納されているためである(具体的には、なぜ、原理-B-ツリー/ B +ツリーの実現のリレーショナルデータベースインデックスを見ることができます)。特定のシナリオの下では、ツリーデータベースの使用がより良いです。たとえば、次のように大量のデータを保存する必要がありますが、データが頻繁に簡単に見てみ、変更されていません。
これは、従来のリレーショナルデータベースと比較して、LDAPを素早く見つけ、それを使用して、ドメインの検証などの場面、が多いに加えています。

LDAPプログラミング動作

私たちは、データを検索変更するJDBC操作MySQLデータベース、追加または削除を使用することができます。同様に、LDAPツリーデータベース、またはJDBCの方法を通じて、ツリーがディレクトリに相当し、階層ディレクトリツリー小枝構造として見ることができるので、加えて、あなたはまた、JNDIの道を(より多くを推奨)を使用することができます。

LDAPサーバー接続ApacheDirectoryStudioによって示されるようにLDAPデータベースツリーを示すデータもあります:

 

 


image.png

 

ApacheDirectoryStudioはNavicatは、ワークベンチに対応する、データベース・サーバへのクライアント接続のインターフェースと見なすことができます。新しい接続は、接続操作は、データベース・サーバと同様です。
ApacheDirectoryStudioダウンロード:
http://download.csdn.net/download/ljheee/10145654


JNDI连接LDAP服务器
輸入org.springframework.beans.factory.annotation.Autowired。
インポートするjava.util.Hashtable;
インポートするjavax.naming *。;
輸入javax.naming.directory.Attribute。
輸入javax.naming.directory.Attributes。
輸入javax.naming.directory.DirContext。
輸入javax.naming.directory.InitialDirContext;

パブリッククラスLdapJNDI {

    @Autowired
    LdapConfiguration ldapConfiguration。

    公共ボイドJNDILookup(){
        文字列rootFilter = "O = cvte.com、O = ISP";
//文字列フィルタ= "(&(スマート型= E1)(スマートステータス= 1))"。
        文字列フィルタ= "(&(スマート型= E1)(UID = 00012047))"。
        文字列名= "UID = USER_NAME、OU =許可、OU =人、O = cc.com、O = ISP"; // xxxの为申请的对接账户
        文字列のパスワード= "PASSW"。

        ENV =新しいHashtableの新しいHashtableの();
        示します。env.put(Context.INITIAL_CONTEXT_FACTORY、 "com.sun.jndi.ldap.LdapCtxFactory"); //接続ファクトリのLDAPの実装を設定
        します。env.put(に、Context.PROVIDER_URL、「LDAP:// 172.26.39.77:389/ "+ rootFilter); // LDAPサーバーのホスト名とポート番号を指定
        示します。env.put(Context.SECURITY_AUTHENTICATION、"シンプル「) ; // 認証環境、SIMPLE、SSL / TLSとSASLを提供する方法を
        示します。env.put(Context.SECURITY_PRINCIPALに、ユーザ名); //指定されたディレクトリの識別名を入力したDN
        示します。env.put(Context.SECURITY_CREDENTIALS、パスワード); //ディレクトリ・パスワードの入力
        示します。env.put( "フィルタ"、フィルター);
        DirContextのCTX = NULL;

        {試し
            //は、初期ディレクトリコンテキストへの参照を取得
            CTX =新をInitialDirContext(ENV)を、

            //検索ベースのエントリ'UID = 00012047、OU =内部、OU =人々は、= cvte.com O、O = ISPが']は存在しません。名前の残りの'UID = 00012047を、=内部をOU'
//はATTRSの=のctx.getAttributes( "UID = 00012047、OU =内部、OU =人々を")属性; //获取到一个人员、


            NamingEnumerationにバインディング=のctx.listBindings( "OU =内部、OU =ピープル"); //は、インサイダーが含まれます

            一方、(bindings.hasMore()){
                バインディングBD =(結合)bindings.next();
                System.out.println(bd.getName()+ ":" + bd.getObject());
            }


             / * DNノードのすべてのプロパティを見つけ、その後、属性からすべての値を取得するには、プロパティが複数の値を持つことができることに注意* /
//(NamingEnumerationにattrs.getAll AE =()のために、ae.hasMore ()){
// //プロパティを取得
//属性ATTR =(属性)ae.next();
//(NamingEnumerationにattr.getAllは、(= VE用); ve.hasMore()){
//システム.out.println(String.Formatの( "属性=%のSは、%S =値"、attr.getID()、ve.next()));
//}
//}

        }キャッチ(javax.naming.AuthenticationException電子){
            するSystem.out.println( "认证失败")。
            e.printStackTrace();
        }キャッチ(例外e){
            System.out.printlnは( "认证出错:")。
            e.printStackTrace();
        } {ついに
            (!CTX = null)の場合には{
                {みてください
                    )(ctx.closeを。
                }キャッチ(NamingExceptionの電子){
                    e.printStackTrace();
                }
            }
        }

    }

    パブリック静的無効メイン(文字列[] args){
        LdapJNDI ldapJNDI =新しいLdapJNDI()。
        ldapJNDI.JNDILookup();

    }

}


LDAP要約する:
1を、LDAP構造ではなく、フォームより、木によって表されます。このため、SQLステートメントを使用することはできません。
2、LDAPはすぐに結果を得ることができますが、書き込みの面で、それははるかに遅いです。
3、LDAPは、静的なデータの迅速なクエリを提供します。
4、クライアント/サーバモデル、データを格納するためのサーバー、クライアントオペレーティングツールのディレクトリ情報ツリー。
5、LDAPは、LDAPプロトコルInterentプロトコルは、クロスプラットフォームで、オープンなインターネット標準です。

おすすめ

転載: www.cnblogs.com/hamac/p/10994682.html