尚玉瑋
中原大學電子工程學系
前言
![](https://i-blog.csdnimg.cn/blog_migrate/b566e974db43a651fd463dc592734782.png)
JNDI提供一種層次化的目錄服務介面:它有可以把簡單的命名服務和簡單的目錄服務模型化的類別,甚至有專門處理LDAP目錄服務的 package。JNDI對應用程式人員來說,是一套強力的工具,並且它可以處理LDAP,ADS等等為目標,就如同JDBC可以處理Oracle, DB2等資料庫。使用JNDI隱藏了許多與各種目錄介面之間的複雜度,然而今天我們將透過一隻範例程式來了解JNDI是如何與Directory Service進行連結與運作。
JNDI Package
在開始我們的範例程式前,讓我們先來了解JNDI(Java Naming and Directory Interface)它所包含的package有哪些。- javax.naming : javax.naming含有Java應用程式存取命名服務所需要的核心類別與介面。
- javax.naming.directory : javax.naming.directory建立於javax.naming基礎上,這個package提供 使用除了一小部分服務外的所有LDAP所提供的服務時,所需的功能。
- javax.naming.ldap : 這個package含有使Java應用程式存取LDAP目錄服務相關之特定功能所需的類別,並提供LDAP version 3管理功能的支援。這些功能代表進階的LDAP功能,在大多數的應用程式裡並不常用到這個package。
- javax.naming.event : 此package含有支援在命名與目錄服務裡的事件通知所需的類別與介面。
- javax.naming.spi : 提供建立基本的JNDI類別延伸的架構,允許建構其他JNDI服務供應者。這個package可以使得開發人員與協力廠商有能力去建構存取Sun沒有提供支援的其他命名與目錄服務的類別。
工具與環境
- IBM Http Server 1.3.19
- IBM SecureWay Directory 3.2.2 版
- JDK 1.3
環境準備
為了能夠讓後面的程式範例順利執行,首先我們將在IBM SecureWay Directory(即Directory Service Server)建立一筆資料,以供我們接下來的程式範例使用。步驟一:
開啟Web broswer,並且在網址輸入"http://localhost/ldap/"進入SecureWay的Server Web管理介面,如下圖,並且輸入管理者的帳號、密碼(管理者的帳號內定為(cn=root,而密碼乃是在安裝過程中所設定)
![](https://i-blog.csdnimg.cn/blog_migrate/c7144a6d30ab024de5d395dfe4753005.png)
步驟二:
進入管理介面後,點選 Setting -> Siffixes 並在Suffix Dn欄位輸入"o=ibm, c=us",然後再點選Update,成功後會如下圖所示
![](https://i-blog.csdnimg.cn/blog_migrate/356f53663064f9d79d9db350a703e699.png)
步驟三:
點選畫面中的restart the server,重新啟動IBM SecureWay Directory
![](https://i-blog.csdnimg.cn/blog_migrate/73deab88f462cf70e80f2abc642a31b0.png)
步驟四:
我們經由開始 -> 程式集 -> IBM SecureWay Directory -> 目錄管理工具 開啟Client介面,開啟之後點選畫面中的"重新整理",選擇"鑑別",一樣輸入管理者的帳號密碼,進行登入的動作
![](https://i-blog.csdnimg.cn/blog_migrate/32c87079512985b7219d4d15894f3eb1.png)
步驟五:
再來點選重新整理目錄樹(會跳出一警告視窗,請按確定即可),點選"新增",在項目類型選擇"組織",母項DN保持空白,項目RDN輸入"o=ibm, c=us",然後點選確定
![](https://i-blog.csdnimg.cn/blog_migrate/6dca9250e4dec33970ea6d78f4afc8e1.png)
步驟六:
接下來,IBM SecureWay Directory會跳出一個畫面,要求您輸入該Entry的其他資料,此部分可不輸入,點選確定即可新增動作
![](https://i-blog.csdnimg.cn/blog_migrate/5c895e74aec8f1c54453e4d2d4682527.png)
步驟七:
再來我們在我們剛剛所建立的Entry底下,再建立一筆人的資料,首先先點選重新整理目錄樹,然後在?o=ibm, c=us?底下點選新增,在項目類型選擇"使用者",母項DN保持不變(即"o=ibm, c=us"),項目RDN輸入"cn=John",然後點選確定
![](https://i-blog.csdnimg.cn/blog_migrate/79ffcda32a7568d4103a545c678deb94.png)
步驟八:
一樣,IBM SecureWay Directory依然會跳出一個畫面,要求您輸入該Entry的其他資料,然後我們選擇在sn(姓氏)欄位輸入"Smith",在userPassword欄位輸入"user"(系統會使用星號做表示),如下圖
![](https://i-blog.csdnimg.cn/blog_migrate/5476f9aa3065c6a5416486b506bc7d38.png)
步驟九:
至此我們已經完成新增資料的動作,在一次點選重新整理目錄樹,我們便可以看到在"o=ibm, c=us"底下有一筆"cn=John"的資料
![](https://i-blog.csdnimg.cn/blog_migrate/547142f182af0fd30b64c8a51b34959e.png)
JNDI程式範例
在資料建立完成後,接著我們透過一之程式範例來解說JNDI是如何與Directory Service進行連結與運作
|
這支程式的主要目的是取出我們剛剛建立cn=John這筆資料中的sn欄位的資料,首先我們可以看到這段程式碼
|
一旦Hashtable環境被正確的建構之後,我們就可以案例化一個新的DirContext,以便於建立一個LDAP服務給Java應用程式使用
|
接著我們指定我們欲搜尋資料的DN
|
並指定我們欲取出欄位的名稱,利用JNDI的Java API,我們便能夠從一個提供Directory Service將我們所需的資訊給索取出來。
|