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