蔣守花 賀春林
(西華師范大學(xué) 計算機(jī)學(xué)院,四川 南充 637009)
隨著計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)安全逐漸得到了人們的重視,對于網(wǎng)站的營運者來說網(wǎng)絡(luò)安全顯得尤為重要。因為一旦受到外來的惡意攻擊,網(wǎng)站就顯得不那么安全、穩(wěn)定了。為了防止惡意訪問,驗證碼應(yīng)運而生,它的誕生是為了防止客戶機(jī)惡意攻擊造成的系統(tǒng)資源浪費,網(wǎng)站性能降低甚至程序崩潰。
驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區(qū)分計算機(jī)和人類的圖靈測試)的縮寫,是將一串隨機(jī)產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。驗證碼一般是防止有人利用機(jī)器人自動批量注冊、對特定的注冊用戶用特定程序暴力破解方式進(jìn)行不斷的登陸、灌水。因為驗證碼是一個混合了數(shù)字或符號的圖片,人眼看起來都費勁,機(jī)器識別起來就更困難。所以現(xiàn)在很多網(wǎng)站都采用了驗證碼技術(shù)。
Struts的工作流程簡介如圖1所示:
圖1 Struts工作流程
1.1 瀏覽器發(fā)送請求,例如請求/mypage.action、/reports/myreport.pdf等。
1.2 Control中的核心控制器FilterDispatcher根據(jù)請求調(diào)用相應(yīng)的業(yè)務(wù)邏輯控制器(Action)。
1.3 Struts的攔截器鏈自動對請求應(yīng)用通用功能,如數(shù)據(jù)校驗和文件上傳等功能。
1.4 回調(diào)Action中的execute()方法,并在方法體內(nèi)調(diào)用業(yè)務(wù)邏輯組件來處理請求(Model)。既可以是將數(shù)據(jù)保存到數(shù)據(jù)庫,也可以從數(shù)據(jù)庫中檢索信息。實際上,因為Action只是一個控制器,它會調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請求。
1.5 execute()方法將調(diào)用業(yè)務(wù)邏輯組件(Model)得到的數(shù)據(jù)返還并更新視圖層(View),可以是HTML頁面、圖像,也可以是PDF文檔或者其他文檔。此時支持的視圖技術(shù)非常多,既支持JSP,也支持Velocity、FreeMarker等模板技術(shù)。
2.1 實現(xiàn)原理
當(dāng)用戶加載登錄頁面的時候,發(fā)送一個請求給servlet,使其產(chǎn)生一個隨機(jī)的驗證碼圖片,servlet中產(chǎn)生4個數(shù)字隨機(jī)組合的驗證碼,存放到request的session中,并在登錄頁面上以圖片的形式顯示在頁面中。當(dāng)用戶填完登錄信息后,再跳轉(zhuǎn)到驗證碼一行,系統(tǒng)就自動彈出驗證碼圖片,用戶填入圖片中的數(shù)字方可登錄,如果還有其他的信息請用戶自行填入。如果在登錄界面看到的驗證碼不清晰,請用戶單擊“換一張”刷新驗證碼,可重復(fù)刷新,直到看到清晰的圖片為止,刷新驗證碼圖片是通過頁面javascript腳本控制的,其實質(zhì)就是重新發(fā)送一次請求給servlet,系統(tǒng)產(chǎn)生新的隨機(jī)驗證碼并更換session中的舊驗證碼。
2.2 實現(xiàn)過程
Login.jsp是登陸界面,驗證碼的圖片要顯示在這上面,在Chkcode.jsp是驗證碼生成的代碼,里面有漢語注釋,自己看。隨機(jī)數(shù)字保存在yzkeyword里面。
在本實現(xiàn)過程中,JSP頁面采用了Struts框架。
2.2.1 首先需要設(shè)計一個登錄頁面Login.jsp,主要源程序如下(非關(guān)鍵代碼已省略):
整個實現(xiàn)比較簡單,如圖2所示:
圖2 登錄界面
2.2.2 Chkcode.jsp是驗證碼生成的代碼,隨機(jī)數(shù)字保存在yzkeyword里面。主要代碼如下(非關(guān)鍵代碼已省略):
2.2.3 在登陸界面,輸入驗證碼點擊登錄,首先在web.xml里面遇到攔截器imageflater,在imageflater里面驗證是否正確。
驗證方式就是把存在yzkeyword里面的數(shù)據(jù)和你輸入的驗證碼進(jìn)行對比。正確就轉(zhuǎn)下一個攔截器,不對,就返回錯誤到lgoin.jsp。
(1)攔截器imageflater.java的主要代碼如下(非關(guān)鍵代碼已省略):
(2)需要編寫的配置文件有兩個:web.xml和Struts-config.xml。在web.xml文件中配置當(dāng)前web應(yīng)用的相關(guān)配置;然后在Struts-config.xml文件中配置與當(dāng)前web應(yīng)用相關(guān)的struts配置。
本文主要介紹了基于Struts框架的驗證碼實現(xiàn),實現(xiàn)過程中登錄界面的設(shè)計,驗證碼圖片還有攔截器都做得不夠完美,還有待進(jìn)一步研究。驗證碼的種類繁多,有字母驗證碼,數(shù)字與字母隨機(jī)結(jié)合的驗證碼,但是本文只介紹了數(shù)字驗證碼這一種形式。證碼技術(shù)隨著網(wǎng)絡(luò)技術(shù)的發(fā)展也會變得更加重要,所以本人還要更加努力的投身于這項技術(shù)的研究中。
[1]劉寶林.Java程序設(shè)計與案例[M].北京:高等教育出版社,2004.
[2]姜國海,趙小薇.Java應(yīng)用案例分析[M].北京:清華大學(xué)出版社,2012.
[3]鄒竹彪.Jsp網(wǎng)絡(luò)編程從入門到精通[M].北京:清華大學(xué)出版社,2007.
[4]邱哲,王俊標(biāo),馬斗.Struts Web設(shè)計與開發(fā)大全[M].北京:清華大學(xué)出版社,2006.
[5]高紅巖.Struts實用開發(fā)指南:基于MVC+MyEclipse的Java Web應(yīng)用開發(fā)[M].北京:科學(xué)出版社.
[6]羅玉玲.J2EE應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社.