劉芷茵
(廣州市越秀區圖書館,廣東 廣州 510030)
隨書光盤是圖書的一種補充,幫助讀者加深對圖書內容的理解,起到輔助學習的作用。但隨書光盤在流通過程中容易出現磨損、丟失等情況,造成光盤保存和管理極為不便。為了更好地保存、管理與利用隨書光盤,目前國內不少圖書館開始使用隨書光盤管理系統,將光盤內容壓縮后存儲在服務器上,通過網絡進行光盤資源管理和應用。這種服務方式,即使隨書光盤能夠以數字化形式長久保存,又提高了隨書光盤的使用效率,體現了圖書館開拓數字化、信息化服務的理念。然而隨書光盤管理系統在使用過程中會遇到很多問題,其中版權保護就是比較關鍵的一個問題。筆者從版權保護出發,探究設計隨書光盤管理系統時規避侵權風險的策略,并在此基礎上提出了系統設計和實現的方案。
圖書館作為公益性的社會文化教育機構,承擔著保障公眾文化權益、讓公眾共享文化成果的責任,理應為公眾提供免費的隨書光盤數字資源服務。但隨書光盤是隨圖書一同發行的電子出版物,依法應受到版權保護。那么,圖書館利用隨書光盤管理系統在網絡上傳播隨書光盤資源將涉及版權問題。《中華人民共和國著作權法》和《信息網絡傳播權保護條例》均規定了版權作品合理使用的多種情形及未經著作權人許可、通過信息網絡傳播版權作品應遵守的規定,為圖書館合理地、正當地為公眾信息資源服務提供了法律依據。因此,圖書館應以保護版權為前提,遵守法律規定,從以下幾方面著手進行隨書光盤管理系統的設計與開發,規避侵權風險。
《中華人民共和國著作權法》第四十七條規定,未經著作權人或者與著作權有關的權利人許可,故意刪除或者改變作品、錄音錄像制品等的權利管理電子信息的行為都是侵權行為,應承擔相應的法律責任。在隨書光盤管理系統使用過程中,加工隨書光盤時,不可對光盤內容作任何刪改,直接壓縮整張光盤的數據,以保證光盤內容的完整性。
《信息網絡傳播權保護條例》第七條規定,圖書館可以不經著作權人許可,通過信息網絡向本館館舍內服務對象提供本館收藏的合法出版的數字作品和依法為陳列或者保存版本的需要以數字化形式復制的作品,不向其支付報酬,但不得直接或者間接獲得經濟利益。《信息網絡傳播權保護條例》第十條規定,圖書館未經著作權人許可、通過信息網絡向公眾提供其作品,應當采取技術措施,防止圖書館服務對象以外的其他人獲得著作權人的作品。根據以上條例,只要圖書館采取有效技術保護措施,控制隨書光盤數字資源網絡傳播的對象和范圍,向本館讀者提供免費服務,不以盈利為目的,則可避免侵權風險。[1]
《信息網絡傳播權保護條例》第二十二條規定,網絡服務提供者通過信息網絡向公眾提供作品、表演、錄音錄像制品,應明確標示該信息存儲空間是為服務對象所提供,并公開網絡服務提供者的名稱、聯系人、網絡地址。隨書光盤管理系統的下載頁面,應公布版權聲明。版權聲明內容除了上述條例提到的內容外,還可以包括用戶合理使用光盤資源的行為說明和侵權行為說明。圖書館發表版權聲明,是為了避免用戶直接侵權行為的發生,同時也是為了履行法律關于注意義務的要求,免除可能產生的圖書館間接侵權責任。[2]
筆者基于以上策略,設計和開發了隨書光盤管理系統,系統架構為Java+Jsp+Tomcat+SQL Server2005。
本系統主要實現隨書光盤的下載利用與系統管理人員對隨書光盤的管理和維護,系統包含用戶驗證、光盤資源下載、光盤資源管理、用戶管理、日志管理等功能模塊。
3.1.1 用戶驗證。本模塊用于用戶身份驗證,判斷用戶是否為圖書館的合法用戶,通過驗證才能登錄系統,驗證信息包括讀者證號和密碼。
3.1.2 光盤資源下載。本模塊用于隨書光盤的下載使用。只有系統認可的合法用戶才有權限下載和使用隨書光盤。
3.1.3 光盤資源管理。本模塊用于系統管理人員對隨書光盤進行加工、上傳、修改、刪除等操作,實現隨書光盤的管理和維護。
3.1.4 用戶管理。本模塊采用多用戶多角色管理機制,實現對系統各級用戶的角色設置和權限分配,確保不同級別的用戶登錄系統后只能夠執行屬于自己權限范圍內的操作,保障系統的安全性。
3.1.5 日志管理。本模塊跟蹤記錄用戶所進行的操作,形成操作日志,并提供日志查詢功能,以便系統管理人員監控用戶的操作行為。
根據系統功能模塊的劃分,系統的數據庫主要包含如下數據表:①光盤資源信息表。包括光盤編號、索取號、光盤名稱、光盤文件名、書名、文件大小、上傳時間七個字段。②用戶信息表。包括用戶編號、用戶名、用戶密碼、角色編號四個字段。③用戶角色表。包括角色編號、角色名稱、角色說明三個字段。④操作權限表。包括權限編號、權限名稱、權限說明三個字段。⑤角色權限關聯表。包括關聯記錄編號、角色編號、權限編號三個字段。⑥操作日志表。包括日志編號、操作類型編號、操作對象、操作執行結果、流量、用戶編號、操作時間、IP地址八個字段。⑦操作日志類型表。包括操作類型編號、操作類型名稱、操作類型說明三個字段。
4.1.1 在Tomcat的conf目錄下找到server.xml文件,配置文件路徑:
<Context path="/iso"docBase="G:disk_data"debug="0"reloadable="true"crossContext="true"/>
其中,path是光盤資源發布到網上下載的虛擬路徑,docBase是光盤資源在服務器存放的物理路徑。
4.1.2 在Tomcat的conf目錄下找到web.xml文件,指定需要下載文件的MIME類型為iso:
<mime-mapping>
<extension>iso</extension>
<mime-type>application/octet-stream</mime-type>
</mime-mapping>
加工隨書光盤,可以用WinlSO或UltralSO等軟件把光盤壓縮成ISO鏡像文件并上傳到服務器。ISO文件是一種符合ISO 9660國際標準的光盤鏡像文件格式,擴充的ISO 9660可以支持市場上幾乎所有的光盤。使用標準的ISO 9660格式壓縮光盤可以保證整張光盤內容的完整性,避免光盤部分信息的丟失。用戶下載ISO鏡像文件后可通過Daemon等虛擬光驅軟件將其虛擬成光盤直接使用[3]。考慮到鏡像文件比較大,為了節省數據庫空間和提高速度,可在服務器上建立存放光盤鏡像的文件夾,把光盤鏡像直接上傳到服務器上。隨書光盤與圖書采用一致的索取號,以索取號作為光盤鏡像的文件名,然后把光盤鏡像的文件名寫進數據庫。
由于隨書光盤管理系統數據庫不具備讀者信息,用戶驗證交由圖書館管理系統處理。隨書光盤管理系統設置用戶登錄界面,獲取用戶的讀者證號和密碼,然后通過基于HTTP協議的讀者身份驗證接口為用戶進行身份驗證,再獲取接口返回的驗證結果,如驗證通過則允許用戶登錄。
接口返回的驗證結果可采取XML作為數據描述文件格式。XML是為互聯網的數據交換而設計的,是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據。系統可以先用專門處理HTTP請求和響應的工具包,比如HttpClient,來獲取XML格式的驗證結果,然后再用DOM、DOM4J、SAX和JDOM等四種解析器中的一種來解析XML。
下面筆者編寫了一個以讀者證號和密碼為參數的ReaderCheck函數,來進行用戶身份驗證。代碼如下:
public static String ReaderCheck(String rdid,String pwd){
//用HttpClient獲取XML
HttpClient httpClient=new HttpClient();
String urlName="……";
PostMethod postMethod=new PostMethod(url-Name);
try{
int responseCode = httpClient.executeMethod(postMethod);
if(responseCode==200){
System.out.println("請求成功.");
String res = postMethod.getResponseBodyAs-String();
//用DOM解析XML
DocumentBuilderFactory dbf=DocumentBuilder-Factory.newInstance();
StringReader reader=new StringReader(res);
InputSource insource = new InputSource(reader);
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(insource);Element root=doc.getDocumentElement();
……}
4.4.1 只允許圖書館借了圖書的讀者下載所借圖書的隨書光盤。隨書光盤和圖書是配套使用的,只學習光盤內容而不看書籍會使學習效果打折扣。而且不加限制地允許用戶大量下載隨書光盤,會存在侵權的潛在風險。雖然可以由系統監控用戶的下載行為,但只能發現短期內同一帳號大量下載隨書光盤的行為,對于多個賬號分時少量下載的行為則較難檢測和判斷。
為了實現此功能,可以由圖書館管理系統提供取得讀者當前借閱信息的接口,隨書光盤管理系統通過該接口獲取用戶當前的借閱信息,如所借圖書帶有隨書光盤,則提示用戶下載。
用戶當前借閱信息的獲取方法可參照用戶身份驗證功能的實現方式操作。
4.4.2 做好防盜鏈處理,防止非授權用戶下載隨書光盤。盜鏈就是一些網站為了豐富自己網站的內容,而盜取其他網站的圖片、音樂、文件的下載地址,放到自己網站上。防盜鏈就是防止這種行為的發生,杜絕非法下載,實現版權保護。
筆者采用的防盜鏈方法是下載光盤資源時隱藏其真實的下載地址。具體流程:根據讀者當前所借圖書的索取號,利用圖書與光盤索取號一致的關聯關系在數據庫中找到對應的光盤文件名,然后把下載鏈接設為“http://xxx/download.jsp?fn=yyy”,其中,xxx是隨書光盤管理系統域名,yyy是光盤文件名。在download.jsp頁面里,先判斷下載請求的來源頁是否為外部網站,如果是則提示用戶登錄,如果不是則動態生成光盤資源真實的下載地址,并實現光盤資源的下載。
動態生成下載地址的原理:把光盤的索取號作為光盤的文件名,由于索取號中帶有的“/”不能作為文件名,因此用“_”代替“/”,比如索取號為H31/165,則文件名為H31_165.iso。然后,再按分類號對光盤文件分類存放,如H類的放在文件名為“h”的文件夾下,那么H31_165.iso在服務器中存放的相對路徑就是“/iso/h/H31_165.iso”。按照這個規則,系統就可以在用戶點擊下載鏈接時再由程序生成每個光盤文件的真實下載地址。
實現防盜鏈的主要代碼如下:
(1)用戶登錄狀態判斷
if((String)session.getAttribute("Username")==null)
{response.sendRedirect("login.jsp");//跳轉到登錄頁面要求用戶登錄}
(2)動態生成下載地址
public static String isopath(String fn){
String filename=fn;
char c=filename.charAt(0);
int i=(int)c;
if(i>=65&&i<=90){
String p=filename.substring(0,1).toLowerCase();
String realpath = "/iso/" + p + "/" +filename;//生成下載地址
}
else
{
System.out.println(“文件名錯誤!”);
}
……
}
(3)下載光盤資源
public String downloadFile(HttpServletRequest request,
HttpServletResponse response){
……
int filelength=0;
try{
response.setContentType(this.getContentType(filename));
response.setHeader("Content-disposition","attachment;filename="+filename);
InputStream fis = new FileInputStream(realpath);
BufferedInputStream bis = new BufferedInput-Stream(fis);
OutputStream fos = response.getOutputStream();
BufferedOutputStream bos=new BufferedOutput-Stream(fos);
int bytesRead=0;
byte bytes=new byte[512000];
while((byteslen=bis.read(bytes))!=-1)
{
filelength+ =byteslen;
bos.write(bytes,0,byteslen);//發送到客戶端
}
……
}catch(IOException e){
……
}
}
系統在用戶進行登錄和退出、下載文件,對光盤資源進行增刪改等操作時,用SQL的insert into語句在操作日志表中插入一條記錄,記錄操作用戶、操作類型、操作對象、操作執行結果、產生的流量、操作時間、所在IP地址等日志信息。用戶登錄和退出日志的記錄可以利用HttpSessionBindingListener接口,通過監聽session的新建和撤銷來實現。
有了日志記錄,就可以利用SQL語句對操作日志表執行查詢和統計,生成統計報表。統計報表可直觀反映隨書光盤的下載頻率和用戶下載隨書光盤的情況。管理人員根據用戶的下載頻率和下載流量就可判斷其使用行為是否合理。[4]
本系統現已在廣州市越秀區圖書館使用,效果良好。本系統在解決版權問題的同時,使隨書光盤得以長久保存,使讀者能夠通過網絡便捷地獲取到所需要的隨書光盤資源,為圖書館開展信息資源服務提供了有效途徑。

[1] 陳小萍,吳高.隨書光盤利用的版權風險與對策研究[J].圖書館論壇,2009(5):53-55.
[2][4]韋景竹,湯罡輝,郭超.圖書館知識產權風險規避自律機制的觀察與分析[J].圖書情報知識,2010(2):92-99.
[3] 戴麗娜.無錫科技職業學院圖書館隨書光盤管理系統的設計[J].內蒙古科技與經濟.2009(19):147-149.