肖千紅
(湖南師范大學(xué),湖南 長沙 410081)
用 Ajax實現(xiàn)圖書館其他系統(tǒng)與 ILASII讀者身份統(tǒng)一認證*
肖千紅
(湖南師范大學(xué),湖南 長沙 410081)
詳細介紹了應(yīng)用 Ajax技術(shù)開發(fā)ILASII讀者數(shù)據(jù)接口實現(xiàn)讀者身份統(tǒng)一認證的原理及實現(xiàn)方法。
圖書館;Ajax;I LASII;統(tǒng)一認證
ILASII是深圖朗思數(shù)字技術(shù)有限公司開發(fā)一款圖書館自動化管理系統(tǒng),在國產(chǎn)圖書館自動化管理系統(tǒng)市場上占有較大的市場份額。但是,由于采用專用數(shù)據(jù)庫后臺,使得第三方軟件無法直接訪問ILASII后臺數(shù)據(jù),加之深圖朗思數(shù)字技術(shù)有限公司提供ILASII非通用接口的價格十分昂貴,這給圖書館門戶網(wǎng)站及其它系統(tǒng)整合ILASII的讀者數(shù)據(jù)帶來極大不便。部分圖書館采用將ILASII數(shù)據(jù)手動導(dǎo)入其它系統(tǒng)的方法實現(xiàn)讀者數(shù)據(jù)整合,這種方法的缺點是讀者數(shù)據(jù)無法與ILASII的讀者數(shù)據(jù)同步,造成讀者數(shù)據(jù)管理困難,因此探求一種經(jīng)濟實用的訪問ILASII讀者數(shù)據(jù)方法,對實現(xiàn)圖書館門戶網(wǎng)站及其它系統(tǒng)的統(tǒng)一身份認證具有十分重要的意義。
從ILASII實時獲取數(shù)據(jù)主要有兩種方法。第一種方法是直接讀寫ILASII服務(wù)器端數(shù)據(jù)庫文件,結(jié)合 Socket通信獲取數(shù)據(jù)。這種方式靈活性高,提取數(shù)據(jù)完整,但開發(fā)難度大,并且容易造成對ILASII數(shù)據(jù)文件的誤操作。第二種方法是通過編程語言與ILASII的Web應(yīng)用進行通信,通過 HTTP方式讀取數(shù)據(jù),這種方式雖然獲得的數(shù)據(jù)有限,但開發(fā)難度較低,獲得的數(shù)據(jù)能夠基本滿足圖書館第三方系統(tǒng)的數(shù)據(jù)要求。本文采用 AJAX技術(shù)實現(xiàn)圖書館門戶網(wǎng)站與ILASIIWeb網(wǎng)上圖書館的讀者身份統(tǒng)一認證即屬于第二種方法。
本文用到的最主要的技術(shù)就是目前流行的 AJAX技術(shù),AJAX(Asynchronous JavaScript and XML)指 異步 JavaScript及XML。通過 AJAX,可使用 JavaScript的 XMLHttpRequest對象來直接與服務(wù)器進行 HTTP通信。通常情況下,ajax用于在客戶端不重載頁面的情況下與 Web服務(wù)器交換數(shù)據(jù),事實上ajax還可用于在服務(wù)器端與任意的Web服務(wù)器進行 HTTP通信。因此使用 ajax技術(shù)可以方便在任意程序中實現(xiàn)與ILASII Web服務(wù)器通信。
編程實現(xiàn)從ILASIIWeb系統(tǒng)中獲取數(shù)據(jù)的基本流程如下:登錄ILASII的網(wǎng)上圖書館 ->獲取 HTTP響應(yīng)數(shù)據(jù) ->分析響應(yīng)數(shù)據(jù)的有效信息 ->提取服務(wù)器傳回的 cookie信息->用獲到 cookie訪問二級授權(quán)頁面 ->分析二級授權(quán)頁面源碼的有有效信息。
能夠正常登錄ILASII網(wǎng)上圖書館授權(quán)頁面的前提條件有兩個:錯誤!未找到引用源。提供正確的讀者證號及密碼 (讀者證號的初始密碼建議在ILASII系統(tǒng)中統(tǒng)一設(shè)置,否則讀者需要自行申請密碼,增加了程序處理的難度);錯誤!未找到引用源。讀者帳號已經(jīng)注冊。為了程序處理的方便,可在正式登錄ILASII網(wǎng)上圖書館前由程序默認注冊網(wǎng)上圖書館帳號。讀者注冊數(shù)據(jù)提交的鏈接地址為:http://BaseUrl/cgibin/adduser(注:BaseUrl為ILASII網(wǎng)上圖書館的域名或 IP地址 +端口),讀者注冊可提供多個參數(shù),其中一些參數(shù)可以省略,必要的參數(shù)形式為:
v_regname=&v_cardno=&v_passwd=&v_repasswd=&v_question=&v_ans wer=
其中 v_regname為注冊名,v_cardno為讀者證號,v_passwd為讀者密碼,v_repasswd為驗證密碼,v_passwd參數(shù)的值必須與 v_repass wd參數(shù)的值保持一致,v_question為密碼取回問題,v_repasswd為密碼取回問題的答案。
ILASII網(wǎng)上圖書館認證的 URL地址為:http://BaseUrl/cgi-bin/confir muser,使用到的參數(shù)有 v_newuser,v_regname,v_cardno,v_passwd,其中 v_newuser可選的值為 0或 1,0指已經(jīng)注冊的用戶,1指尚未注冊的用戶,此參數(shù)可以省略,默認值為 0。v_regname為用戶的網(wǎng)上注冊名,v_cardno參數(shù)為讀者證號,此參數(shù)僅在 v_regname值為空時才有效。v_pass wd為讀者帳戶密碼.。登錄網(wǎng)上圖書館用到可選參數(shù)形式為 ([]內(nèi)的參數(shù)為可選項):[v_newuser=0&][v_regname=已注冊的名字 &]v_cardno=讀者證號 &v_passwd=讀者密碼 (建議使用讀者證號而不是網(wǎng)上注冊名登錄,因為讀者可以不需要讀者證號而申請任意的ILASII網(wǎng)上圖書館帳號從而降低了系統(tǒng)的安全性),以 GET方式登錄網(wǎng)上圖書館時將上述參數(shù)用符號”?”附在 URL地址后即可,如果以 POST方式登錄網(wǎng)上圖書館,可將上述參數(shù)作為 POST方式的內(nèi)容體傳遞給服務(wù)器。
使用上小節(jié)提到參數(shù)形式登錄ILASII網(wǎng)上圖書館,根據(jù)不同的情況,將出現(xiàn)六種結(jié)果:錯誤!未找到引用源。網(wǎng)絡(luò)故障或服務(wù)器關(guān)閉,無任何返回數(shù)據(jù)。錯誤!未找到引用源。服務(wù)器正常監(jiān)聽,但Web程序故障,則返回非 200的錯誤狀態(tài)提示碼。錯誤!未找到引用源。提供的網(wǎng)上注冊名或讀者證號錯誤,則返回注冊名或讀者證號不存在的錯誤提示頁面。錯誤!未找到引用源。提供的網(wǎng)上注冊名或讀者證號正確但相應(yīng)的密碼錯誤,則返回密碼錯誤的提示頁面。錯誤!未找到引用源。提供的網(wǎng)上注冊名或讀者證號及相應(yīng)的密碼正確,但用戶沒有注冊,則返回讀者注冊頁面。錯誤!未找到引用源。提供的網(wǎng)上注冊名或讀者證號及相應(yīng)的密碼均正確且用戶已經(jīng)注冊,則返回網(wǎng)上圖書館的詳細頁面。
第三方系統(tǒng)對讀者身份數(shù)據(jù)的需求有時可能比較簡單,例如僅需驗收證讀者證是否存在,讀者密碼是否正確。對于這種簡單需求,則無需再次訪問網(wǎng)上圖書館的二級授權(quán)頁面,直接使用登錄后的一級頁面即可獲得系統(tǒng)需要的必要信息。具體的作法有兩種:錯誤!未找到引用源。首先確定 HTTP返回狀態(tài)碼是否為 200,再用正則表達式分析頁面的特征字符串,如“讀者證號……不存在”及“……密碼錯誤”等字符串。這種方式比較準確,適應(yīng)性強,但時間效率稍低。錯誤!未找到引用源。首先確定 HTTP返回狀態(tài)碼是否為 200,再判斷返回頁面的長度,這種方法時間效率較高,但因為ILASII的管理員可以修改Web頁面的部分內(nèi)容,從而頁面長度發(fā)生變化,可能后導(dǎo)致程序誤判,但是因為ILASII的Web頁面不會經(jīng)常發(fā)生變化,這種方法在實踐中還是可行的。錯誤!未找到引用源。本方法不適用對安全性要求比較高的環(huán)境,因為ILASII系統(tǒng)中讀者網(wǎng)上注冊信息表與讀者真實身份信息表是兩個獨立的數(shù)據(jù)表,讀者即使注銷了身份,網(wǎng)上注冊信息表中的信息依然存在,因此此時采用上述方法將導(dǎo)致程序誤判。
如果需要獲取讀者詳細信息,如讀者狀態(tài),有效期等則需要進入網(wǎng)上圖書館的二級頁面。因為二級頁面需要 cookie認證,則需要判斷首次登錄網(wǎng)上圖書館是否獲得了服務(wù)器返回的 cookie標識,再將這些 cookie附上訪問二級頁面,如果可以從二級授權(quán)頁面中取到正常讀者信息,則可認定讀者是在籍讀者。其中重要的二級頁面主要有四個:錯誤!未找到引用源。cgi-bin/SrchAuthority獲取讀者的借閱權(quán)限信息;錯誤!未找到引用源。cgi-bin/SrchLoan可獲取讀者的身份信息及借閱詳情;錯誤!未找到引用源。cgi-bin/SrchFin可獲取讀者的身份信息及財經(jīng)信息;錯誤!未找到引用源。/cgi-bin/ModPasswd可修改讀者密碼,附加參數(shù)形式為 v_newpasswd=&v_repasswd=。取到上述特定二級頁面后即可使用相應(yīng)的正則表達式將讀者信息從全部的網(wǎng)頁信息中提取出來,為進一步提高效率,還可將返回頁面進行適當(dāng)字符截斷后再用正則表達式提取。
下面的示例代碼演示了用 ASP腳本提取讀者身份信息實現(xiàn)方法,獲取讀者其它信息的方法基本相同。
<%
ConstBaseUrl="Http://*.*.*.* "
ConstMethod="GET"
Const STRS=748’讀者詳情頁面截取開始位置,可根據(jù)I
LASIIWeb頁面一次性分析取得
Const STRE=1500’讀者詳情頁面截取結(jié)束位置,可根據(jù)I
LASIIWeb頁面一次性分析取得
Dim Http,Url,NextUrl,UserName,Pass Word,GetHttpPage,Cookie,pattern
CardNo=Trim(Request("CardNo"))
Pass Word=Trim(Request("Pass Word"))
On Error Resume Next
’使用最新的XMLHTTP服務(wù)器端版本
Set Http=Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
If Err Then
Err.clear
Set Http=Server.CreateObject("MSXML2.ServerXMLHTTP.5.0")
End If
If Err Then
Err.clear
Set Http=Server.CreateObject("MSXML2.ServerXMLHTTP")
End If
’設(shè)置服務(wù)器超時,防止網(wǎng)絡(luò)故障導(dǎo)致服務(wù)器死機
Http.setTimeouts 2000,2000,2000,2000
Url=BaseUrl&"/cgi-bin/confirmuser"
‘為保證某些特殊意義的字符也能夠被正常傳輸,需對URL參數(shù)時行 URL編碼
Url=Url&"?v_cardno="&Server.URLEncode(CardNo)&"&v_passwd="&Server.URLEncode(Pass Word)
NextUrl=BaseUrl&"/cgi-bin/SrchLoan"
GetHttpPage=""
’使用異步方式發(fā)送HTTP請求
Http.OpenMethod,Url,False
Http.Send
If Http.Readystate=4 And Http.Status="200"Then
’XMLHTTP對象會自動緩存 Cookie,因此每次需重新核對Cookie,否則有可能誤取其它讀者的身份數(shù)據(jù)
Cookie=Http.GetResponseHeader("Set-Cookie")
If Instr(Cookie,CardNo)<>0 then
’XMLHTTP對象可以自動處理 Cookie,因此訪問二級認證頁面無須人為處理 Cookie數(shù)據(jù),使用其它方式 Cookie數(shù)據(jù)可能需要人工干預(yù)
Http.OpenMethod,NextUrl,False
Http.Send
If Http.Readystate=4 And Http.Status="200"Then
’XMLHTTP得到 Response時假定 Response是 UTF8編碼的,它把含 GB2312編碼的 HT ML當(dāng)成 UTF8格式,因此,必須對返回的 Response數(shù)據(jù)進行編碼轉(zhuǎn)換,否則將出現(xiàn)亂碼。
GetHttpPage=BytesToBstr(Http.ResponseBody,"GBK")
End IF
End If
End If
?
Function BytesToBstr(Body,Cset)
……
End Function
?
Function RegExp(patrn,strng)
……
End Function
pattern=">([^<>]+)</td>"’從讀者詳情頁面表格中獲取有效數(shù)據(jù)的模式,使用正則表達式的 ()分組標識符,可以使數(shù)據(jù)提取更加方便
Response.W rite(RegExp(pattern,Mid(GetHttpPage,STRS,STRE)))
%>
用上面的腳本取到的數(shù)據(jù)示例如下:M000*0000|張三 |教職工 |20010920-20290204|有效 |5|0|0|0||0|,上面格式化數(shù)據(jù)可將方便地嵌入到圖書館的其它應(yīng)用系統(tǒng)中,從而實現(xiàn)真實有效的讀者數(shù)據(jù)整合,達到統(tǒng)一認證的目的。
[1]劉甲學(xué),王鑫.圖書館 2.0研究綜述[J].現(xiàn)代情報,2008,(7):44-47.
[2]蘭小媛.維基在圖書館應(yīng)用的實踐及前景[J].圖書館雜志,2006,(8):19-21,41.
[3]王澤賢.I LASII系統(tǒng)數(shù)據(jù)庫的二次開發(fā)[J].廣州大學(xué)學(xué)報 (綜合版),2001,(5):29-35.
[4]方東權(quán),等.數(shù)字校園中圖書館門戶和系統(tǒng)集成的設(shè)計與實現(xiàn)[J].華中農(nóng)業(yè)大學(xué)學(xué)報,2008,(6):467-472.
2010-01-15
肖千紅 (1963-),女,湖南澧縣人,助理館員。