王志遠(yuǎn)
(中歐國(guó)際工商學(xué)院,上海 201206)
在開(kāi)發(fā)一款用戶針對(duì)學(xué)校的職工和師生的軟件中,被要求實(shí)現(xiàn)一個(gè)比較有趣的需求??蛻粝M浖軐?shí)現(xiàn)對(duì)Outlook全球地址簿中人員信息的同步獲取。通過(guò)這樣的接口進(jìn)行信息對(duì)接以后,配合以CRM系統(tǒng)的數(shù)據(jù)同步,一定程度上就能增強(qiáng)的學(xué)校內(nèi)部各類人員信息的控制和管理。加強(qiáng)學(xué)校信息平臺(tái)的基礎(chǔ)搭建,最直接的便是方便了人員之間、人員和部門(mén)組織的交流。這樣擁有云特征的通訊簿是具備“互聯(lián)網(wǎng)+”時(shí)代特征的,并且是人們所需要的。像許多軟件擁有比較良好的軟件生態(tài)一樣,這樣做表明軟件正在向這一良好趨勢(shì)靠近。
在JAVA中有原生的API可以實(shí)現(xiàn)對(duì)LDAP的訪問(wèn)。其實(shí)也有工具,比如LDAPTemplate。它是基于SPRING開(kāi)發(fā)的,雖然這個(gè)開(kāi)源框架的操作方法和SPRING的JDBCTEMPLETE很相似,同時(shí)也傳承了前者的一定的復(fù)雜性,更重要的是,由于一些IDE之間的支持上的問(wèn)題,加上筆者對(duì)原生的API更加青睞。JNDI(命名和目錄訪問(wèn)接口)將各種不同名字和目錄服務(wù)的訪問(wèn)統(tǒng)一起來(lái)并且使用了相同的接口,這里就使用JNDI進(jìn)行LDAP服務(wù)器的連接認(rèn)證以及一些個(gè)人信息的讀取。這樣也更具通用性,也不需要特別的去下載一些JAR包。
這其實(shí)有點(diǎn)像利用JNDI建立數(shù)據(jù)庫(kù)的連接,Web開(kāi)發(fā)的編程人員一定會(huì)很熟悉。創(chuàng)建一個(gè)環(huán)境變量的集合,其實(shí)是一個(gè)Hashtable,用以存放服務(wù)提供者的名字以及一些環(huán)境屬性。其中的“com.sun.jndi.ldap.LdapCtxFactory”為 sun 的文件服務(wù)提供者。
Hashtable HashEnv= new Hashtable()
這些信息會(huì)通過(guò)環(huán)境屬性傳遞給服務(wù)提供者,也就是前面提到的。這些信息包括LDAP服務(wù)器的位置,以及認(rèn)證信息。當(dāng)然不同目錄的客戶端需要的連接信息會(huì)有所不同。
然后是初始化上下文。將之前構(gòu)造的結(jié)構(gòu)以參數(shù)形式傳入。到這里如果一切順利正常的話也完成了一個(gè)簡(jiǎn)單的連接認(rèn)證。為 了 使 用 DirContext 對(duì) 象 , 要 導(dǎo) 入 javax.naming.directory.DirContext。
DirContextctx= new InitialDirContext(env)
首先要?jiǎng)?chuàng)建查詢對(duì)象控制器(Search Controls),并設(shè)置查詢邊界(Search Scope),增加搜索過(guò)濾器(Search Filter)設(shè)定針對(duì)用戶個(gè)人信息進(jìn)行查詢,然后設(shè)置搜索節(jié)點(diǎn)并定制返回屬性。
調(diào)用 DirContext.search()查詢上下文“OU= MultiShareDrives”中匹配的條目。最后對(duì)返回的NamingEnumeration對(duì)象進(jìn)行遍歷。其中也可以通過(guò)thumbnailPhoto的屬性值,尋找到相應(yīng)的內(nèi)容,以文件輸出流的形式生成圖片文件,以此可以獲取聯(lián)系人的頭像信息。
searchCtls.setReturningAttributes(returnedAtts);
NamingEnumeration answer= ctx.search(searchBase,searchFilter,searchCtls);
while (answer.hasMore()) {
SearchResultsr= (SearchResult)answer.next();
System.out.println(">>>"+ sr.getName());
printAttrs(sr.getAttributes());}
以上介紹了通過(guò)JAVA獲取LDAP服務(wù)器上AD的信息。當(dāng)然JAVA提供了豐富的API,可以進(jìn)行不僅僅如上所論述的簡(jiǎn)單查詢,通過(guò)API同樣可以對(duì)AD信息進(jìn)行增加刪除修改等操作。通過(guò)這些方法,能讓軟件系統(tǒng)與LDAP服務(wù)器更好的無(wú)縫對(duì)接,增強(qiáng)軟件的實(shí)用性,更加有助于拓寬管理者的思路。
[1]張少敏,史占成,郭雅薇,等.改進(jìn)的LDAP服務(wù)體系及其在電力系統(tǒng)PKI中的應(yīng)用[J].繼電器,2008,36(8):73-75.
[2]常潘,沈富可.基于 LDAP的校園網(wǎng)統(tǒng)一身份認(rèn)證的實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2007,33(5):281-282.
[3]任軍.基于 LDAP 的目錄服務(wù)綜述[J].計(jì)算機(jī)應(yīng)用研究,2005,22(5):8-10.
[4]陸吉倉(cāng),楊蒙,楊耀景.Active Directory在信息化管理中的應(yīng)用與研究[J].中國(guó)信息化,2013(14).
[5]許峰.基于 Active Directory 的電臺(tái)制播網(wǎng)組建、管理模式[J].西部廣播電視,2013(10).
[6]趙天海,沈鈞毅,齊勇,等.基于 JNDI的高可靠命名服務(wù)的研究[J].計(jì)算機(jī)工程,2006,32(6).