一 、什么是LDAP
LDAP:(輕量級目錄訪問協議,Lightweight Directory AccessProtocol)
它是基於 X.500標准的,但是簡單多了並且可以根據需要定制。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。
目錄是一個為查詢、瀏覽和搜索而優化的專業分布式數據庫,它成樹狀結構組織數據,就好象Linux/Unix系統中的文件目錄一樣。目錄數據庫和關系數據 庫不同,它有優異的讀性能,但寫性能差,並且沒有事務處理、回滾等復雜功能,數據修改使用簡單的鎖定機制實現All-or-Nothing,不適於存儲修 改頻繁的數據。所以目錄天生是用來查詢的,就好象它的名字一樣。現在國際上的目錄服務標准有兩個,一個是較早的X.500標准,一個是較新的LDAP標 准。
LDAP誕生的目標是快速響應和大容量查詢並且提供多目錄服務器的信息復制功能,它為讀密集型的操作進行專門的 優化。因此,當從LDAP服務器中讀取數據的時候會比從專門為OLTP優化的關系型數據庫中讀取數據快一個數量級。
LDAP常用術語解釋:
DN:distinguished name。在LDAP目錄中的所有記錄項都有一個唯一的DN
CN,OU,DC都是LDAP連接服務器的端字 符串中的區別名稱;
LDAP連接服務器的連接字串格式為:ldap://servername/DN
其中DN有三個屬性,分別是CN,OU,DC
LDAP是一種通訊協議,如同HTTP是一種協議一樣的!在LDAP目錄中。
uid (User ID)
CN (Common Name)
DC (Domain Component) 域名元素
OU (Organizational Unit)
SN (surname)
An LDAP 目錄類似於文件系統目錄. 下列目錄:
DC=redmond,DC=wa,DC=microsoft,DC=com
如果我們類比文件系統的話,可被看作如下文件路徑:
Com/Microsoft/Wa/Redmond
例如:CN=test,OU=developer,DC=domainname,DC=com
在上面的代碼中cn=test代表一個用戶名,ou=developer代表一個active directory中的組織單位。
這句話的含義是test這個對象處在domainname.com域的developer組織單元中。
二、LDAP的安裝
1.下載安裝 openldap for windows,版本2.2.29.可以在百度上搜索openldap for windows。
安裝很簡單,一路 next 即可,假設我們安裝在C:\Program Files\OpenLDAP
2.配置 openldap,編輯 slapd.conf 文件
1)、打開C:\Program Files\OpenLDAP \slapd.conf,找到ucdata-path ./ucdata
include ./schema/core.schema,在它后面添加
include ./schema/cosine.schema
include ./schema/inetorgperson.schema
接下來的例子只需要用到以上三個 schema,當然,如果你覺得需要的話,你可以把其他的 schema 全部添加進來
include ./schema/nis.schema
include ./schema/openldap.schema
include ./schema/dyngroup.schema
include ./schema/collective.schema
include ./schema/corba.schema
include ./schema/duaconf.schema
include ./schema/java.schema
include ./schema/misc.schema
include ./schema/pmi.schema
include ./schema/ppolicy.schema
2)、下面我們做一個示例:
需要在 slapd.conf 配置文件中,找到
suffix “dc=my-domain,dc=com”
rootdn “cn=Manager,dc=my-domain,dc=com”
把這兩行改為
suffix "dc=mycompany,dc=com"
rootdn "cn=Manager,dc=mycompany,dc=com"
suffix 就是看自己如何定義了,后面步驟的 ldif 文件就必須與它定義了。還要注意到這個配置文件中有一個 rootpw secret,這個 secret 是cn=Manager 的密碼,以后會用到,不過這里是明文密碼,你可以用命令:slappasswd -h {MD5} -s secret (“secret“是自定義的密碼,可以隨便設置)算出加密的密碼{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==替換配置中的 secret。
3. 啟動 OpenLDAP
CMD 進入到C:\Program Files\OpenLDAP 下,
1)、啟動OpenLDAP-slapd服務:作用在於開機自動啟動該服務項
slapd install OpenLDAP-slapd “OpenLDAP Directory Service” auto
net start OpenLDAP-slapd
NOTE: the “slapd install” is only needed if you didn’t choose the “create NTservice” option during installation.
當你完成這一步后,下次開機的時候就自動啟動LDAP的服務了,不必再次手動啟動。(此步也可以忽略不做!)
2)、啟 動OpenLDAP服務器
在cmd下運行:slapd -d 1
啟動成功可以看到控制台下打印一片信息,如下圖
openldap 默認是用的 Berkeley DB 數據庫存儲目錄數據的。
4. 建立條目,編輯導入 ldif 文件
1) 新建一個 ldif(LDAP Data Interchanged Format) 文件(純文本格式),例如 setup.ldif.
setup.ldif 文件內容如下:
dn:dc=mycompany,dc=com objectClass:top objectClass:dcObject objectClass:domain dc: mycompany dn:ou=roles,dc=mycompany,dc=com objectClass:top objectClass:organizationalUnit ou: roles dn:ou=people,dc=mycompany,dc=com objectClass:top objectClass:organizationalUnit ou:people dn:cn=Test Users,ou=roles,dc=mycompany,dc=com objectClass: groupOfUniqueNames cn: Test Users uniqueMember: uid=sspecial,ou=people,dc=mycompany,dc=com uniqueMember: uid=jbloggs,ou=people,dc=mycompany,dc=com dn:cn=Special Users,ou=roles,dc=mycompany,dc=com objectClass: groupOfUniqueNames cn: Special Users uniqueMember: uid=sspecial,ou=people,dc=mycompany,dc=com dn:cn=Admin Users,ou=roles,dc=mycompany,dc=com objectClass: groupOfUniqueNames cn: Admin Users uniqueMember: uid=admin,ou=people,dc=mycompany,dc=com dn:uid=admin,ou=people,dc=mycompany,dc=com objectClass: person objectClass: inetOrgPerson cn:State App displayName: App Admin givenName: App mail: admin@fake.org sn: Admin uid: admin userPassword: adminpassword dn:uid=jbloggs,ou=people,dc=mycompany,dc=com objectClass: person objectClass: inetOrgPerson cn: Joe Bloggs displayName: Joe Bloggs givenName: Joe mail: jbloggs@fake.org sn: Bloggs uid: jbloggs userPassword: password dn:uid=sspecial,ou=people,dc=mycompany,dc=com objectClass: person objectClass: inetOrgPerson cn: Super Special displayName: Super Special givenName: Super mail: sspecial@fake.org sn: Special uid: sspecial userPassword: password
2) 執行命令:ldapadd -x -D“cn=manager,dc=mycompany,dc=com” -w secret -f setup.ldif
注意: ldapadd 命令使用的前提是必須裝過oracle數據庫。我之前沒裝,會提示ldapadd是不可執行的命令,總之就是系統不認識這個命令。后來裝了oracle之后就可以用了。
以上圖示表示你已經將上述內容導入到LDAP數據庫了。
如果沒有”ldapadd“這個命令,還可以用它自帶的命令“slapadd”代替導入數據文件。不過要注意的是:和ldapadd命令不同的是:執行slapadd命令前需要先停止之前啟動的 slapd 服務(打開服務確定停止了該服務),然后在控制台中切換到openLDAP安裝目錄下執行命令:
slapadd -v -l ./setup.ldif
ldapadd 和 slapadd 的差異:
- ldapadd 對本地和遠程服務都可以操作,操作時LDAP服務是不能停止
- slapadd 只能對本地的LDAP服務進行操作,操作時本地LDAP服務必須先停止
5. LdapBrowser 瀏覽
可點擊鏈接 http://www.blogjava.net/Files/Unmi/LdapBrowser282.rar下載。解壓並雙擊lbe.bat批處理文件,彈出LDAP Browser窗口中默認會有一個OpenLdap_Localhost的鏈接,選edit
彈出下面的對話框,輸入你的主機名:注意:如果是localhost 就不行。原因在哪里我也不很矛盾。輸入你在slapd.conf文件中的DN,和密碼。
SAVE—>>>Connect—>>>
連接成功之后看到的結構圖:
6. Java 連接 openldap進行測試是否連接成功
package com.pccw.cms.test; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class LDAPTest { public LDAPTest() { } @SuppressWarnings("unchecked") public static void main(String[] args) { String root = "dc=mycompany,dc=com"; //root @SuppressWarnings("rawtypes") Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://192.168.3.51/" + root); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=manager,dc=mycompany,dc=com"); env.put(Context.SECURITY_CREDENTIALS, "secret"); DirContext ctx = null; try { ctx = new InitialDirContext(env); System.out.println("認證成功"); } catch (javax.naming.AuthenticationException e) { e.printStackTrace(); System.out.println("認證失敗"); } catch (Exception e) { System.out.println("認證出錯:"); e.printStackTrace(); } if (ctx != null) { try { ctx.close(); } catch (NamingException e) { //ignore } } System.exit(0); } }
7.啟動OpenLDAP服務的批處理
新建一個文本文檔,在文檔寫入一下內容:
@echo off
color 07
echo 正在啟動HZCA-LDAP文件,請稍等........
cd /d C:\Program Files\OpenLDAP
slapd -d 1
color 07
echo 啟動失敗!請重新啟動OpenLDAP-slapd程序!輸入啟動指令:
slapd -d 1
echo.& pause
將文檔保存為autoStart.bat 那么當你點擊它是,就啟動LDAP的服務了!(若你已經在前面將LDAP的服務設定為開機自動啟動,那就不需要再次啟動這個服務。)
好了,關於LDAP的基本配置就講到這里。
原文鏈接:https://blog.csdn.net/chenxuejiakaren/article/details/7367572
https://blog.csdn.net/heyitian/article/details/53508663
https://blog.csdn.net/sinat_28690417/article/details/83451127