多くの場合、システムを構築するとき、私たちは自分自身でユーザー管理システムを作成しますが、これは開発者にとって難しくありません。ただし、複数の異なるシステムを維持する必要があり、システム全体で同じユーザーが使用される場合、各システムが独自のユーザー情報を維持する場合、ユーザー情報の同期はより面倒になり、ユーザー自身にとって非常に面倒になります。さまざまなシステムの一貫性のないパスワードを引き起こすのは簡単です。この時点でLDAPを導入して、ユーザーの基本情報を中央に保存し、統一された読み取りインターフェイスと検証メカニズムを提供すると、そのような問題は解決しやすくなります。 Spring Bootを使用して開発するときにLDAPサーバーにアクセスする方法について話しましょう。
LDAPの紹介
LDAP(LightWeight Directory Access Protocol)は、ディレクトリサービスを提供する情報サービスです。ディレクトリサービスは、読み取り、閲覧、検索操作に特に最適化された特別なデータベースシステムです。ディレクトリは通常、記述的な属性ベースの情報を含み、細かく複雑なフィルタリング機能をサポートするために使用されます。ディレクトリは通常、多数の更新操作を必要とする一般的なデータベースの複雑なトランザクション管理または回転戦略をサポートしていません。ディレクトリサービスの更新は一般的に非常に簡単です。この種のディレクトリは、個人情報、Webリンク、JPEG画像などを含むさまざまな情報を保存できます。ディレクトリに保存されている情報にアクセスするには、TCP/IPで実行されているアクセスプロトコル-LDAPを使用する必要があります。
LDAPディレクトリの情報はツリー構造に従って編成され、特定の情報はエントリ(エントリ)のデータ構造に保存されます。エントリは、リレーショナルデータベース内のテーブルの記録と同等です。エントリは、エイリアスDN(Distinguished Name)を備えた属性です。 DNはエントリを参照するために使用され、DNはリレーショナルデータベーステーブルのキーワードと同等です。属性は、タイプ(タイプ)と1つ以上の値(値)で構成されます。これは、リレーショナルデータベースのフィールド(フィールド)に相当します。フィールド名とデータ型で構成されています。検索のために、LDAPのタイプは、データの冗長性を減らす必要があるリレーショナルデータベースに実装されているフィールドではなく、複数の値を持つことができます。 LDAPのエントリの組織は、一般に地理的な場所と組織関係に従って組織されていますが、これは非常に直感的です。 LDAPはファイルにデータを保存し、効率を向上させるために、リレーショナルデータベースの代わりにインデックスベースのファイルデータベースを使用できます。タイプの例はメールで、その値はメールアドレスになります。
LDAP情報はツリー構造に保存されます。ツリールートは一般に、国(c = cn)またはドメイン名(dc = com)を定義し、その下では、1つ以上の組織(o = acme)または組織単位(ou =人)を定義します。組織ユニットには、すべての従業員、建物内のすべてのプリンターなどの情報が含まれている場合があります。さらに、LDAPは、ObjectClassと呼ばれる特別な属性で実装されたエントリによってサポートできる、およびサポートする必要がある属性の制御をサポートしています。属性の値は、エントリが従わなければならないルールの一部を決定します。これは、エントリが少なくとも含まれる可能性がある属性を指定します。たとえば、inetorgpersonオブジェクトクラスは、SN(姓)およびCN(共通名)属性をサポートする必要がありますが、電子メール、電話番号などのオプションの属性も含めることができます。
LDAPの略語
開始例
LDAPの基本概念を理解した後、簡単な例を通してさらに理解できます!
基本的なスプリングブートプロジェクトを作成します(まだわからない場合は、これら2つの記事を参照できます。
pom.xmlに2つの重要な依存関係を導入します
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-data-ldap </artifactid> </dependency> <deprof> <deprowid> com.unboundid </groupid> <artifactid> unboundid-ldapsdk </artifactid </scope> </scope>
その中で、Spring-Boot-Starter-Data-Ldapは、Spring Bootによってカプセル化されたLDAPオートメーション構成の実装です。 LDAPサーバーで特定の操作を実行するためのSpring-Data-LDAPに基づいています。
unboundid-ldapsdkは、主にここに埋め込まれたLDAPサーバーを使用してテスト操作を実行するために使用されるため、スコープがテストに設定されています。実際のアプリケーションでは、通常、実際の独立したLDAPサーバーに接続するため、この依存関係は必要ありません。
src/test/resourcesディレクトリにLDAP-server.ldifファイルを作成して、LDAPサーバーの基本データを保存して、後のプログラムにアクセスできるようにします。
dn:dc = didispace、dc = comobjectclass:topobjectclass:domaindn:ou =人、dc = didispace、dc = comobjectclass:topobjectclass:angulationalunitou:peopledn:uid = ben、ou =人、dc = didispace、dc = comobjectclass:topobjectclass inetorgpersoncn:didisn:zhaiyongchaouid:didiuserpassword:{sha} nfcebwjxfalbhhg1qk5u4trbvq =ここには、本名のZhaiyongchaoと一般的に使用される名前Didiがあり、ここに基本的なユーザーが作成されます。その後のプログラムでは、この情報をお読みください。その他のコンテンツの説明については、LDAPを詳細に学んで理解できます。ここではあまり説明しません。
application.propertiesに埋め込まれたLDAP構成を追加します
spring.ldap.embedded.ldif = ldap-server.ldifspring.ldap.embedded.base-dn = dc = didispace、dc = com
spring-data-ldapの基本的な使用法を使用して、LDAPのプロパティと対応するリポジトリで定義されているエンティティのプロパティ間の関係マッピングを定義する
@data @entry(base = "ou = peopm、dc = diidspace、dc = com"、objectclasses = "inetorgperson")public class person {@id private name id; @dnattribute(value = "uid"、index = 3)private string uid; @attribute(name = "cn")private string commonname; @attribute(name = "sn")プライベート文字列suername; private string userpassword;} public interface personrepositoryはcrudrepository <person、name> {}を拡張します上記の定義の後、PersonオブジェクトはLDAPストレージコンテンツでマッピングされました。 PersonRepositoryを使用して、LDAPコンテンツを簡単に読み書きするだけです。
すべてのユーザー情報を読み取るためのユニットテストケースを作成します。
@runwith(springrunner.class)@springboottestpublic class applicationtests {@autowired private personrepository personrepository; @test public void findall()throws exception {personrepository.findall()。foreach(p-> {system.out.println(p);}); }}このテストケースを開始した後、LDAP-Server.ldifで維持されたばかりのユーザー情報がコンソールに出力されていることがわかります。
2018-01-27 14:25:06.283 WARN 73630 --- [Main] OSLDAP.ODM.CORE.IMPL.OBJECTMETADATA:エントリークラスの人は最終的に宣言する必要があります
人(id = uid = ben、ou =人、dc = didispace、dc = com、uid = ben、commonname = didi、suername = zhaiyongchao、 userpassword = 123,83,72,65,125,110,70,67,101,98,87,106,120,102,97,76,98,72,72,71,49,81,107,53,85,85,52,116,114,114,98,118,1,61)
ユーザーを追加します
上記の初心者の例を使用して、独立して完了することができれば、Spring BootでLDAPを操作するという基本的な目標が完了しました。
Springデータを十分に知っている場合、その下のこのサブプロジェクトは担当者の抽象化にも準拠している必要があると想像することは難しくありません。したがって、上記のPersonERepositoryを使用して、次のコードなどの操作を簡単に実装して、LDAPにユーザーを簡単に追加することができます。
人の人= new Person(); person.setuid( "uid:1"); person.setsuername( "aaa"); person.setCommonname( "aaa"); person.setuserpassword( "123456"); personrepository.save(person);
より多くの操作を実装する場合は、使用するためにSpring-Data-LDAPのドキュメントを参照できます。
LDAPサーバーに接続します
この記事の例では、埋め込まれたLDAPサーバーが使用されています。実際、この方法は、現地のテストと開発の使用に限定されています。実際の環境では、LDAPサーバーは独立して展開する必要があります。
Spring Bootパッケージでは、上記の例を埋め込まれたLDAPの代わりにリモートLDAPに接続するように、次のパラメーターを構成する必要があります。
spring.ldap.urls = ldap:// localhost:1235spring.ldap.base = dc = didispace、dc = comspring.ldap.username = didispacespring.ldap.password = 123456
この記事のコード
次の2つのリポジトリを使用して、章3-2-10ディレクトリを確認できます。
github:https://github.com/dyc87112/springboot-learning/
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。