版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第4章 Struts 2輸入校驗 輸入校驗分為客戶端校驗和服務器端校驗??蛻舳诵r灴梢赃^濾掉用戶的錯誤操作,是第一道防線,一般使用JavaScript代碼實現。僅有客戶端驗證還是不夠的。攻擊者還可以繞過客戶端校驗直接進行非法輸入,這樣可能會引起系統的異常,所以必須加上服務器端的驗證。但僅有服務器端驗證也是不行的,客戶的錯誤操作總是提交到服務器,由服務器端進行驗證返回錯誤信息,這樣會加重服務器的負擔。所以客戶端驗證和服務器端驗證缺一不可,兩者結合起來才可以構建健壯的系統。4.1 輸入校驗的意義 4.1.1 什么是輸入校驗 4.1.2 為什么要進行輸入校驗 4.1.1 什么是輸入校驗輸入校驗,從字
2、面上來看好像是指對如輸入的密碼或者用戶名輸入錯誤的校驗。其實這個不算輸入校驗,這個算是業(yè)務邏輯的判斷了。輸入校驗是對輸入的用戶名長度、密碼長度、年齡信息等的判斷。為了給大家一個感官上的認識,現在打開163郵箱的注冊頁面,如圖4-1所示。4.1.2 為什么要進行輸入校驗那為什么要進行輸入校驗呢?使用它有什么好處呢?為了更好地說明,來看下面這個注冊頁面,如圖4-3所示?,F在按常規(guī)輸入用戶注冊信息,單擊“注冊”按鈕進行注冊。頁面跳轉到注冊信息顯示頁,如圖4-4所示。4.2 客戶端校驗 輸入校驗分為客戶端校驗和服務器端校驗。客戶端校驗可以過濾掉用戶的錯誤操作,是第一道防線,一般使用JavaScript
3、代碼實現。下面介紹如何通過編寫JavaScript來實現客戶端校驗。4.2.1 正則表達式 客戶端校驗一般都使用JavaScript來進行輸入的校驗。JavaScript對輸入判斷都會使用到正則表達式。正則表達式是字符串處理的利器,功能非常強大。 正則表達式的功能非常強大,通過它可以進行字符串匹配、字符串查找、字符串替換。今天重點介紹字符串的匹配功能,字符串的匹配功能對于輸入校驗提供了很大的幫助。先看下面簡單的正則表達式的示例。 正則表達式:a.b 匹配abb,acb,等 “.“是正則表達式的特殊字符,它的含義是匹配所有的字符還有空格和Tab鍵。4.2.2 JavaScript中使用正則表達式
4、 下面以一個簡單示例來介紹在JavaScript中使用正則表達式進行字符串匹配。程序要求必須輸入數字,如果輸入的不是數字就彈出提示,代碼如下所示。4.2.3 JavaScript完成客戶端校驗現在為注冊示例添加客戶端校驗功能。首先來看下有哪些輸入校驗規(guī)則。(1)用戶名、密碼、確認密碼必須輸入。(2)用戶名只能是數字或者字母,長度為620之間。(3)密碼,確認密碼必須是數字或者字母,長度為620之間。(4)密碼和確認密碼必須相同。(5)年齡必須為整數而且必須是有效的年齡值。(6)出生日期必須為正確的日期格式如1988-01-03,而且只能是19*年到200*年之間。(7)郵箱地址必須為合法的郵箱
5、地址。4.3 服務器端校驗 前面介紹了如何添加客服端校驗,但是僅有客戶端驗證還是不夠的。攻擊者還可以繞過客戶端校驗直接進行非法輸入,這樣可能會引起系統的異常,所以必須加上服務器端的驗證。下面來看如何添加服務器端校驗。4.3.1 服務器端校驗的重要性在上一個示例中為注冊頁面添加了客戶端校驗,如果用戶輸入的信息不合法則無法提交。這時這里要注意的時,使用JavaScript增加客戶端校驗僅僅使得非法的數據無法提交,但是一些侵入者完全可以采用其他的方式來進行提交。下面來看如何繞過這些JavaScript校驗代碼?首先可以直接把這個注冊頁面下載下來,然后通過刪除那些JavaScript代碼,再修改表單的
6、提交地址。這樣的話,就算是輸入不合法的信息,客戶端校驗也起不了作用了,因為連JavaScript代碼都被刪除掉了。通過一種如此簡單的方法就可以繞過這些JavaScript校驗代碼。那些侵入者很可能使用更加高級的手段來繞過這些JavaScript代碼,從而直接提交非法的數據。要避免這種情況就必須添加服務器端校驗,服務端校驗是整個Web應用中最重要的一道防線。用戶使無法直接接觸到服務器端代碼的,這樣的話就算是客戶端校驗被人繞過,仍然能夠通過服務器端校驗來阻止用戶的非法輸入。服務器端校驗對于系統的安全性、完整性、健壯性起到了至關重要的作用。那是不是客戶端校驗根本就沒有什么意義了呢?其實不是,因為并不
7、是每個用戶都有這樣惡意侵入的想法。大部分的用戶都是采用的正常的輸入,使用客戶端校驗能夠過濾掉用戶的錯誤操作。如果沒有客戶端校驗,那么就算用戶只是一個錯誤的操作,服務器端就要對其輸入的信息進行處理并返回錯誤提示,這樣會大大增加服務器端的負載??蛻舳诵r灳拖袷且话焰i,能夠防君子但是不能防小人。同樣客戶端校驗和服務器端校驗是緊密結合的,兩者缺一不可。4.3.2 完成服務器端輸入校驗 現在以上面那個示例的要求來添加服務器端校驗。為了能更好地觀察服務器端輸出的錯誤信息,暫時不使用客戶端的校驗代碼。這里只是暫時地去掉客戶端校驗代碼,這樣才能更好地查看服務端校驗的效果。步驟如下所示。 首先新建一個用戶注冊頁
8、。在輸入頁中除了輸入表單外,添加一個標簽用來輸出actionerror中的錯誤信息。4.3.3 測試服務器端輸入校驗現在打開用戶注冊頁,不輸入任何數據,單擊“提交”按鈕,頁面將提示按要求進行輸入的錯誤信息,如圖4-10所示。因為程序要求輸入用戶名、密碼、確認密碼必須輸入,所以會提示要求用戶進行輸入。同樣假如輸入錯誤非法的出生日期。如“1000-02-03”時,單擊“提交”按鈕,頁面將會提示要求用戶輸入有效的出生日期,如圖4-11所示。4.3.4 使頁面保留提交信息 如果希望表單中能夠保留提交的信息,可以在表單的每個元素中添加value屬性,并設置值,如下所示。4.3.5 使用addFieldE
9、rror來添加錯誤信息在前面介紹了使用actionError來保存輸入校驗錯誤提示信息。actionError其實就是一個ArrayList,將錯誤信息保存在actionError中,其實就是保存在一個ArrayList中。前面曾講過類型轉換的錯誤信息是保存在fieldError中,同樣輸入校驗的錯誤信息也可以通過addFieldError方法來保存到fieldError中。fieldError和actionError不同的是,fieldError是采用Map結構來存儲的,所以都是以鍵值對來保存信息。那到底是使用fieldError來保存錯誤提示信息還是使用actionError好呢?這個就依
10、據項目具體要求而定了,如果只是希望在頁面中單純的顯示錯誤提示信息,可以使用actionError來保存錯誤提示信息;如果希望在相應的文本框中顯示錯誤提示信息,則需要使用fieldError來保存錯誤提示信息。下面來看如何將錯誤提示信息保存到fieldError中。首先可以使用addFieldError方法來替代addActionError方法,從而將錯誤提示信息保存到fieldError中。其中addFieldError方法中包含兩個參數,第一個參數用來輸入參數名(也可以說是Action中屬性名或者說是表單元素中的name屬性值),第二個參數用來輸入校驗錯誤提示信息。4.3.6 輸入校驗與類型
11、轉換關系 下面來看輸入校驗和類型轉換之間的關系。首先打開上面的注冊頁面,在年齡文本框中輸入一個非法的信息,如“aa”。這時頁面將顯示錯誤信息,如圖4-16所示。4.4 動態(tài)方法調用以及校驗動態(tài)方法 Struts 2允許在一個Action中包含多個處理邏輯,從而通過調用Action中不同的方法來處理請求。同樣對于每個處理邏輯,都可以提供相應的校驗方法。下面介紹如何添加動態(tài)方法調用以及校驗動態(tài)方法的使用。4.4.1 動態(tài)方法調用Struts 2允許在一個Action中包含多個處理邏輯。例如在同一個表單中,用戶通過不同的按鈕提交表單時,在Action中調用不同的方法來處理請求。下面來看一個簡單示例。
12、首先新建如下的JSP頁面。該頁面同前面的用戶注冊頁非常類似,不同的是增加了一個刪除按鈕,代碼如下所示。4.4.2 為action元素指定method屬性上次通過在“刪除”按鈕中指定其action屬性值為register!deleteUser,從而示將表單提交給配置名為regist的Action的deleteUser方法來處理。發(fā)現指定action屬性值為register!deleteUser這樣的方式比較麻煩。如果能夠像“注冊”按鈕那樣直接提交給一個register應該會比較好一點。這個時候要借助于struts.xml配置文件了。在元素中指定action的method屬性,則可以讓Action
13、類調用指定的方法,代碼如下所示。通過這種方法,就好比將一個Action定義成了多個邏輯上的Action,Action類的每個處理方法被映射成一個邏輯Action。4.4.3 校驗動態(tài)方法前面介紹的在一個Action中包含多個處理邏輯,不同處理邏輯對應不同的方法。那如何定義輸入校驗來校驗這些處理邏輯呢?下面來看一個簡單示例,首先將上一示例中的Action中添加一個validate()方法,該方法將在控制臺上簡單的打印一句話,代碼如下所示。public void validate() System.out.println(validate method);這里為了簡單測試,并不輸入任何的用戶信息。直接單擊“注冊”按鈕,在控制臺將打印如下語句:validate methodexecute method從控制臺打印的語句可以看出,在Action中首先執(zhí)行了validate()校驗方法,然后再執(zhí)行execute()處理邏輯方法。如果單擊“刪除”按鈕,在控制臺將打印如下語句。validate methoddelete method4.4.4 Struts 2輸入校驗流程為了能夠更加了解輸入校驗的流程,下面來看輸入校驗的程序流程圖,如圖4-19所示。4.5 小結 本章首先介紹了什么是輸入校驗,為什么要進行輸入校驗。介紹了輸入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《密封件基礎知識》課件
- 2024年貴州建設職業(yè)技術學院單招職業(yè)技能測試題庫標準卷
- 單位管理制度集合大全人事管理十篇
- 單位管理制度匯編大全人事管理
- 單位管理制度合并匯編【人員管理】
- 單位管理制度呈現匯編職工管理篇十篇
- 單位管理制度呈現大全人員管理
- 《礦山勞動衛(wèi)生》課件
- 《生活中的問題》課件
- 《安全防護欄標準》課件
- “雙減”背景下小學數學“教、學、評”一體化的思考與實踐
- 中外美術評析與欣賞智慧樹知到期末考試答案章節(jié)答案2024年湖南大學
- 事業(yè)單位考試《綜合知識和能力測試》試卷
- 福利住房與購房補貼制度
- 康師傅烏龍茗茶營銷策劃書
- 【川教版】《生命 生態(tài) 安全》四上第13課《預防凍瘡》課件
- 工廠籌建方案
- UPVC管道安裝施工方法
- 河南省鄭州高新技術產業(yè)開發(fā)區(qū)2023-2024學年三年級上學期1月期末科學試題
- 女裝行業(yè)退貨率分析
- 計算機基礎理論-進制的概念及換算試題及答案
評論
0/150
提交評論