999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

混合方式數據驗證方案的研究

2013-11-30 05:02:12陳建勛
計算機工程與設計 2013年1期
關鍵詞:用戶

劉 成,張 凱,陳建勛

(武漢科技大學 計算機科學與技術學院,湖北 武漢430065)

0 引 言

在企業級信息系統中,數據的準確性、合法性是企業關注的核心。數據驗證是指對數據在特定的上下文中的合法性檢查,是過濾非法數據的安全屏障[1]。在企業級應用項目中,幾乎所有與用戶交互相關的地方也都會用到數據驗證,它既可以防止非法數據進入系統內部,又可以及時為用戶反饋錄入數據的驗證結果。所以,數據驗證是提高軟件系統魯棒性的一個關鍵過程。

一般來說,數據驗證根據不同的因素有不同的類型劃分。從場所上來說分為:客戶端驗證、服務器端驗證和數據庫端驗證。從驗證時機來說分為:用戶輸入時驗證和用戶輸入后驗證。其中驗證輸入時只能在客戶端實現。從驗證復雜度來說分為:錄入控制、域完整性校驗、實體完整性校驗和參照完整性校驗。錄入控制是約束用戶輸入的每個字符;域完整性校驗指輸入項要有指定的規則;實體完整性校驗指在域完整性的前提下,不同域之間是否存在相互矛盾;參照完整性校驗指在滿足以上驗證基礎上還要考慮到數據在數據庫表中主鍵不能重復的問題等。

當前大多數數據驗證方案:只實現驗證復雜度中域完整性校驗,從而數據驗證功能不夠全面;驗證場所單一化,導致服務器端效率較低。如文獻[2]提出了一種面向切面的數據驗證組件設計方案,該方案只在服務器端進行數據驗證,驗證場所單一,不能實現驗證復雜度中的錄入控制,會降低用戶與系統的交互效率。文獻[3]提出了基于Valang技術的數據驗證方案,該方案能實現完整的數據驗證功能,但驗證功能在客戶端和服務器兩端有重復性工作,服務器端性能沒有最優化,并且移植性較不好。為了克服以上問題,本文提出一種客戶端和服務器端在驗證復雜度上進行分工合作的混合驗證方案。

1 混合驗證方案的設計

基于系統的移植性和維護性,開發者一般不采用數據庫端驗證的方式。要實現一個完善的數據驗證功能,應該包括4種驗證復雜度。從驗證場所來說,不管是客戶端數據驗證還是服務器端數據驗證都不能覆蓋所有驗證復雜度,但兩者的并集可以實現所有的驗證復雜度驗證。

本文驗證方案的整體組織結構圖如圖1所示。將驗證復雜度中的錄入控制驗證和域完整性驗證在客戶端實現,實體完整性驗證和參照完整性在服務器端實現。其依據是:把盡可能多的任務放到客戶端處理是提高服務器端效率的有效途徑。在上述的驗證復雜度中,前兩者只涉及到詞法分析,可以在客戶端完成;后兩者需要語義分析,需要在服務器端進行。但同時為了數據驗證的安全性,在客戶端驗證失效時,服務器端也能處理域完整性驗證。

圖1 驗證方案的組織結構

1.1 客戶端數據驗證方案設計

以往客戶端表單的數據驗證中,一般在文本對象模型(document object model,DOM)元素中指定了點擊事件的觸發函數,如給提交按鈕指定onClick觸發事件,并在此函數中進行數據驗證。該驗證函數逐個檢驗表單中每個組件的值,若全部驗證成功則執行后臺操作,否則提示用戶錯誤的表單項,阻止后續的操作。這種實現在邏輯上易于理解,但是表示層的組件代碼需要引用驗證函數,而驗證函數也要引用表單項組件,兩者不能獨立開來,導致耦合度較高,不易于維護和擴展,重用性也較低。

針對此問題,提出了在客戶端以事件監聽方式分離表示層和表示層數據驗證的方案。客戶端驗證的模型包括XML文件、表單、驗證文件、事件監聽器。其具體框架如圖2所示。

圖2 客戶端驗證框架

在圖2中,驗證模型的各個部分之間的功能如下:

(1)XML配置文件。它描述對應表單中具體表單項所采用的驗證方式。它以驗證類(Validator類及其子類)的數組形式被加載到程序中。在客戶端框架中,由于表單多樣化,XML文件需要編程人員具體編寫。XML文檔包括一個根結點和多個第二級結點,其格式約定如下:

<FormValidator>

<Validator type=”String”expression=””source=””/>

<Validator type=”Number”source=””/>

</FormValidator>

在第二級結點中,type屬性代表域完整性驗證的類型,expression表示按照正則表達式規則驗證匹配,source對應表單組件的id。

(2)Validator類及其子類。該類的source屬性指向表單中要驗證的表單項元素,擁有對目標元素數據值驗證的功能。Validator1和Validator2是Validator的不同子類,比如用來驗證數字的驗證類和用來驗證日期的驗證類等。

(3)表單。只描述表示層具體元素和排版信息,無需關心元素的value值是否需要驗證。

(4)事件監聽器。事件監聽器FormValidator通過加載XML文件中的配置,把對應表單的驗證需求信息以Validator類的形式全部存入其中。然后通過Validator給表單項添加上監聽事件,并監聽Validator類的驗證結果。

1.2 服務器端數據驗證方案設計

服務器端數據驗證完成驗證復雜度中的實體完整性驗證和參照完整性驗證。當用戶取消客戶端腳本運行狀態時,客戶端驗證將失效,然而域完整性控制驗證是系統安全性保障的必要條件,故服務器端需要域完整性驗證。面向切面編程(aspect-oriented programming,AOP)技術能較好的分離服務器端驗證模塊和系統業務邏輯模塊,使代碼耦合度更低,Valang可以解決域完整性控制驗證,并且侵入性小[3]。因此,本文采用AOP和Valang技術來實現服務器端的數據驗證。

當客戶端數據傳到服務器端,服務器端執行相應的業務邏輯處理。在執行業務邏輯前AOP切面類截獲處理函數的參數并阻止業務處理函數的執行,然后對截獲的數據進行驗證,從而實現業務邏輯和驗證模塊的完全分離。服務器端數據驗證的數據流圖如圖3所示。

圖3 服務器端數據驗證數據流

服務器端數據驗證主要進行了實體完整性驗證和參照完整性驗證,這些數據驗證涉及到系統中的邏輯性問題。譬如,工程的開工日期不能大于結束日期、身份證的隱含性別和填寫性別不能矛盾、憑據有效日期在幾個月之內、數據庫表能接受當前信息的插入等。而在服務器端的域完整性驗證是在客戶端驗證失效的情況下才執行,其通常是約定參數的格式。譬如,時間的格式、身份證號碼的格式等。服務器端數據驗證模塊結構圖如圖4所示。

圖4 服務器端數據驗證模塊類結構

Java能較好的闡述邏輯性問題,適合實體完整性驗證和參照完整性驗證;Valang支持以XML配置方式來約束驗證項的約束規則,適合域完整性驗證。在圖5中通過Java編碼方式實現實體完整性驗證和參照完整性驗證,從Spring IoC(inversion of control,控制反轉)容器中取得驗證規則并用Valang方式實現域完整性驗證。

2 混合驗證方案的實現

2.1 客戶端事件監聽方案工作流程

DOM是一種與瀏覽器、平臺、語言無關,允許程序和腳本動態的訪問和更新HTML與XML文件內容、結構和樣式的API[4]。DOM定義了標準的事件機制,目前大部分主流的瀏覽器實現了該事件機制[5]。在DOM標準下除了可以直接為DOM元素指定事件,也可以通過注冊的方式為DOM元素綁定事件[6]。本文客戶端驗證方案的核心是通過獨立于表示層外的XML文檔來為表示層組件注冊on-Change事件。

客戶端驗證方案的工作流程在時間上分為兩個階段。第一個是程序加載時的初始化階段:①初始化一個Form-Validator對象用來控制表單驗證;②把XML靜態配置文件中的每個結點轉化成Validator對象添加到FormValidator中,為每個Validator對象的源目標source注冊onChange監聽事件。設置每個Validator對象的觸發者trigger為FormValidator;③在FormValidator中初始化一個bool類型數組voteMap,其中的元素對應每個Validator是否驗證成功的布爾值,全部初始化為false;④設置每個Validator對象驗證成功和驗證失敗的監聽函數,在這個監聽函數中回調自定義的函數。

第二個階段是用戶開始向表單中錄入數據:①用戶在表單中錄入數據,觸發表單元素的onChange事件;②on-Change事件被FormValidator監聽,FormValidator中定義了對應的監聽函數,并分派出CHANGE事件;③在初始化階段設定了Validator的觸發者為FormValidator,當FormValidator派出CHANGE事件時會使Validator進行表單項數據驗證,并對驗證的結果發出valid(驗證合法事件)或invalid(驗證不合法事件);④在FormValidator中設定了對Validator發出的valid和invalid事件的監聽,然后做出相應的回調事件。圖5是用戶在錄入時,客戶端進行的一次數據驗證時序圖。

圖5 用戶輸入時驗證的一次驗證時序圖

2.2 服務器端數據驗證實現

AOP為開發者提供了另一種組織應用程序結構的方式,不再是面向對象編程(Object Oriented Programming,OOP)中的類和接口,它主要的編程元素是切面(aspect),故它善于解決項目中的橫切性問題[7-8]。

目前,成熟的AOP框架比較多,它們都是針對不同的目的,基于不同的技術實現。但主流的有AspectJ、JBoss AOP、Spring AOP三個開源的框架[9]。本文采用Spring AOP框架實現服務器端數據驗證。Spring AOP的基本術語見表1。

表1 Spring AOP基本術語

在Spring AOP應用中,開發者只需進行AOP的相關配置。本文涉及以下配置項,切面類(Aspect):業務邏輯中橫切性的問題,如數據驗證;切入點(PointCut):切面動作切入到業務邏輯中的具體位置,通常是一串匹配符;連接點(JoinPoint):切入點地方的業務邏輯,在Spring中是業務邏輯中的某些函數;通知(Advice):決定切面在連接點之前還是之后等。Spring AOP含有5種advice,Before、After、AfterReturning、AfterThrowing、Around,其中Around是所有通知類型中功能最為強大的,能夠全面控制連接點,決定何時執行連接點甚至短路連接點,起到一個真正攔截器的作用[10]。數據驗證如果不通過,那么業務邏輯就不會執行,用Around通知可在此時短路業務邏輯。

Valang是一種支持聲明式的驗證器。作為一種新型的驗證工具,它提供了專門的驗證語言,具有簡單、易擴展和可讀性高等特性。Valang除了可以應用到Spring MVC(module-view-control,模型-視圖-控制)框架中,還可以對簡單Java對象(plain old java objects,POJO)進行驗證[11]。Valang支持XML配置方式,可以通過Spring的IoC把驗證類注入到環境中從而降低了耦合度[12]。為了提高驗證的絕對安全性,本文采用Valang作為 “替補”,僅在客戶端失效的時候代替客戶端完成域完整性驗證:用Valang驗證語言定制表達式,并通過Spring依賴注入(depending injection,DI)方式注入到Bean標記定義的驗證器的Valang屬性中。驗證器由Valang框架提供,開發者只需配置與POJO對應的屬性約束。其約束性驗證語言通俗易懂且與系統低耦合。

3 驗證方案的實際運行

3.1 客戶端驗證方案的使用方式

在客戶端驗證方案中實現了驗證核心類FormValidator和對數據進行域完整性驗證的Validator類。在使用的過程中分為如下3步:①編寫對應一個表單的XML文件;②在客戶端頁面加載程序中初始化FormValidator對象,并加載XML文檔;③設定FormValidator對象的驗證失敗和驗證成功時的回調函數,通常是設定 “提交按鈕”是否可用。其中②③步驟在不同的應用中使用方式都一樣,所以客戶端驗證方案的主要任務是編寫對應表單的XML文件。XML文件的約束格式簡單,能適應表單的需求變化,靈活性強。

3.2 服務器端驗證方案的使用方式

在服務器端的驗證方案中,實現技術是Spring AOP和Valang技術。AOP技術跟驗證模塊沒有直接的關系,它是把驗證模塊徹底從業務邏輯中分離出來,降低系統模塊的耦合度。而驗證模塊的代碼實現需要編程人員根據系統的特定邏輯具體實現。AOP配置核心代碼如下:

在上述配置代碼中,把AOP切面指定到類validate-Aop上,并采用validateAop類中的ValidateDatas方法來進行數據驗證,而AOP的橫切性關注點是checkData,即形如 “* bllimpl.*.add*(..)”和 “bllimpl.*.mod*(..)”形式的方法(bllimpl包下所有類中以add和mod開頭的方法)。在ValidateDatas方法中進行編程人員自定義的驗證邏輯。Valang方面以驗證POJO為例,如類User(其只包括username,age一個String類型和一個int類型)為例,驗證器bean的定義和驗證規則注入。

3.3 驗證方案的運行效果

最后在某個礦山企業的工程項目管理系統中采用此驗證方案實現該系統的數據驗證功能。以其中的付款憑證錄入界面為例,其實際運行效果圖如圖6、圖7所示。在圖6和圖7需要驗證的表單項中,憑證號按憑證的編寫規則進行驗證,預付款、結算款、扣材料、質保金等都是金額。圖6為有非法輸入的界面,圖7為正確輸入的界面。

圖6 驗證不成功時界面

該驗證方案有較好的交互性。當表單項的驗證不成功時,表單項的邊框變成紅色,能清晰的告訴用戶所輸入的數據是否合法。并且當光標落到輸入不合法的表單項時能提示用戶具體的錯誤信息。界面的 “提交”按鈕最初以不可用的狀態呈現給用戶,直到用戶填寫的所有數據符合了驗證規則,“提交”按鈕自動轉成可用狀態。當客戶端滿足驗證進行提交后,如果服務器端實體完整性驗證和參照完整性驗證不通過,以彈出框的形式提示客戶端用戶。經該系統的投入運行,確實提高了用戶交互的效率。

圖7 驗證成功時界面

4 結束語

本文的數據驗證方案完整地實現了所有的驗證復雜度,與傳統只關注域完整性驗證方案相比有較好的安全性和用戶體驗;采用分工合作的多場所驗證方式,與傳統單一場所驗證方式相比有較高的效率。實現方式上分別在客戶端采用事件監聽機制和服務器端采用Aop和Valang技術,與傳統AOP數據驗證方案相比更簡化數據驗證模塊。該方案可以應用到所有以服務器/客戶端模式的管理系統中。但不足之處在于AOP和Valang技術依賴Java的Spring框架,服務器端實現方式只能在Java環境中實現。

[1]YANG Tiejun,NIU Qinzhou,HUANG Lin,et al.Method of heterogeneous data validation based on interface definition[J].Computer Engineering,2009,35(24):66-68(in Chinese).[楊鐵軍,牛秦洲,黃琳,等.基于接口定義的異構數據有效性驗證方法[J].計算機工程,2009,35(24):66-68.]

[2]ZHAO Guangli.Research and implementation of aspect-oriented data validation component[J].Computer Engineering and Design,2010,31(1):206-209(in Chinese).[趙廣利.面向切面的數據驗證組件研究與實現[J].計算機工程與設計,2010,31(1):206-209.]

[3]CHENG Man,ZHAO Binzhi,WANG Tianli,et al.Research on data validation with Valang[J].Computer Engineering and Design,2009,30(13):3251-3253(in Chinese).[程滿,趙賓植,王天理,等.基于Valang技術的數據驗證機制研究[J].計算機工程與設計,2009,30(13):3251-3253.]

[4]ZHANG Ruixue,SONG Mingqiu,GONG Yanlei,et al.Parsing DOM tree reversely and extracting web main page information[J].Computer Science,2011,38(4):213-215(in Chinese).[張瑞雪,宋明秋,公衍磊,等.逆序解析DOM樹及網頁正文信息提取[J].計算機科學,2011,38(4):213-215.]

[5]Patrick O Bobbie,Yiming Ji.Modeling and synthesizing eventdriven simulators from collaborating uml statecharts[C].10th IASTED International Conference on Software Engineering and Applications,2006:1-7.

[6]GUO Hongyan,YANG Bo,JIN Beihong,et al.Research on high performance DOM implementation[J].Computer Science,2006,33(6):274-277(in Chinese).[郭紅艷,楊波,金蓓弘,等.高效DOM實現的技術研究[J].計算機科學,2006,33(6):274-277.]

[7]ZHANG Xian,DONG Wei,QI Zhichang,et al.Conflicts detection in runtime verification based on AOP[J].Journal of Software,2011,22(6):1224-1235(in Chinese).[張獻,董威,齊治昌,等.基于AOP的運行時驗證中的沖突檢測[J].軟件學報,2011,22(6):1224-1235.]

[8]SHAO Fudong,LIU Xiaodong,YANG Baoming,et al.Research and implementation of program condition visualization based on AOP[J].Journal of Computer Applications,2006,26(10):2483-2485(in Chinese).[邵付東,劉曉東,楊保明,等.基于AOP的程序狀態可視化方法研究與實現[J].計算機應用,2006,26(10):2483-2485.]

[9]ZHANG Yingjie,LIU Wanjun.Research on the application of Spring AOP in the security authentication of J2EE systems[J].Computer Engineering & Science,2008,30(8):137-138(in Chinese).[張英捷,劉萬軍.Spring AOP技術在J2EE系統安全性驗證中的應用研究[J].計算機工程與科學,2008,30(8):137-138.]

[10]Eric Tanter,Rodolfo Toledo,Guillaume Pothier,et al.Flexible metaprogramming and AOP in Java[J].Science of Computer Programming,2008,72(1/2):22-30.

[11]Pasquale Arpaia,Mario Luca Bernardi.An aspect-oriented programming-based approach to software development for fault detection in measurement systems[J].Computer Standards and Interfaces,2010,32(3):141-152.

[12]ZHAO Yanni,WANG Yinghui,LEI Yu,et al.Research and implement of software framework based on IOC/AOP[J].Computer Engineering and Applications,2008,44(29):92-95(in Chinese).[趙艷妮,王映輝,雷宇,等.一種基于AOP/IOC的軟件框架研究與實現[J].計算機工程與應用,2008,44(29):92-95.]

猜你喜歡
用戶
雅閣國內用戶交付突破300萬輛
車主之友(2022年4期)2022-08-27 00:58:26
您撥打的用戶已戀愛,請稍后再哭
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年5期)2016-11-28 09:55:15
兩新黨建新媒體用戶與全網新媒體用戶之間有何差別
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
挖掘用戶需求尖端科技應用
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 首页亚洲国产丝袜长腿综合| 国产精品七七在线播放| 成人伊人色一区二区三区| 免费在线一区| 尤物成AV人片在线观看| 国产99久久亚洲综合精品西瓜tv| 亚洲成人一区在线| 国产第八页| 亚洲人妖在线| 免费高清毛片| 毛片基地视频| 日本久久久久久免费网络| 色综合综合网| 2022国产91精品久久久久久| 日韩精品欧美国产在线| 四虎永久在线精品国产免费| 99精品福利视频| 日本精品一在线观看视频| 国产成人AV综合久久| 色婷婷亚洲十月十月色天| 67194成是人免费无码| 国产精品女熟高潮视频| 婷婷综合在线观看丁香| 免费欧美一级| 在线网站18禁| 日韩一级毛一欧美一国产| 久久精品人人做人人爽电影蜜月| 看国产一级毛片| 成人一级黄色毛片| 久久狠狠色噜噜狠狠狠狠97视色 | 国产永久免费视频m3u8| 欧美高清日韩| 国产成人综合在线观看| 性欧美在线| 五月婷婷亚洲综合| 99精品伊人久久久大香线蕉 | 亚洲成在线观看| 一区二区影院| 日韩无码黄色| 国产免费网址| 欧美日韩一区二区在线免费观看 | 制服丝袜一区二区三区在线| 国产18在线播放| 国产精品人人做人人爽人人添| 国产精品私拍99pans大尺度| www.亚洲一区| 亚洲精品免费网站| 欧美日韩动态图| 国产在线无码av完整版在线观看| 亚洲第一视频免费在线| 青青草国产精品久久久久| 日韩无码视频网站| av尤物免费在线观看| 中文字幕在线视频免费| 91小视频在线播放| 日韩不卡免费视频| 2021国产乱人伦在线播放| 怡红院美国分院一区二区| 玖玖精品视频在线观看| 青青久久91| 亚洲婷婷六月| 国产丝袜啪啪| 国产精品人成在线播放| 亚洲无码电影| 免费看av在线网站网址| 无码电影在线观看| 无码视频国产精品一区二区 | 久久亚洲日本不卡一区二区| 毛片视频网址| 国产成人1024精品下载| 国产尤物jk自慰制服喷水| 九色在线视频导航91| 国产免费a级片| 国产极品美女在线| 一级毛片高清| 国产亚洲第一页| 成人午夜亚洲影视在线观看| 国产日韩欧美精品区性色| 亚洲男人的天堂在线观看| AV片亚洲国产男人的天堂| 国产日韩久久久久无码精品| 波多野结衣亚洲一区|