2023SpringBoot教學(xué)課件 第14章 數(shù)據(jù)驗(yàn)證_第1頁
2023SpringBoot教學(xué)課件 第14章 數(shù)據(jù)驗(yàn)證_第2頁
2023SpringBoot教學(xué)課件 第14章 數(shù)據(jù)驗(yàn)證_第3頁
2023SpringBoot教學(xué)課件 第14章 數(shù)據(jù)驗(yàn)證_第4頁
2023SpringBoot教學(xué)課件 第14章 數(shù)據(jù)驗(yàn)證_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第14章數(shù)據(jù)驗(yàn)證主要內(nèi)容數(shù)據(jù)驗(yàn)證概述Spring驗(yàn)證JSR303驗(yàn)證14.1數(shù)據(jù)驗(yàn)證概述

數(shù)據(jù)驗(yàn)證分為客戶端驗(yàn)證和服務(wù)器端驗(yàn)證,客戶端驗(yàn)證主要是過濾正常用戶的誤操作,主要通過JavaScript代碼完成;服務(wù)器端驗(yàn)證是整個(gè)應(yīng)用阻止非法數(shù)據(jù)的最后防線,主要通過在應(yīng)用中編程實(shí)現(xiàn)。14.1.1客戶端驗(yàn)證

大多數(shù)情況下,使用JavaScript進(jìn)行客戶端驗(yàn)證的步驟如下:

編寫驗(yàn)證函數(shù)

在提交表單的事件中調(diào)用驗(yàn)證函數(shù)

根據(jù)驗(yàn)證函數(shù)來判斷是否進(jìn)行表單提交

客戶端驗(yàn)證可以過濾用戶的誤操作,是第一道防線,一般使用JavaScript代碼實(shí)現(xiàn)。僅有客戶端驗(yàn)證還是不夠的。攻擊者還可以繞過客戶端驗(yàn)證直接進(jìn)行非法輸入,這樣可能會(huì)引起系統(tǒng)的異常,為了確保數(shù)據(jù)的合法性,防止用戶通過非正常手段提交錯(cuò)誤信息。所以必須加上服務(wù)器端的驗(yàn)證。14.1.2服務(wù)器端驗(yàn)證SpringMVC的Converter和Formatter在進(jìn)行類型轉(zhuǎn)換時(shí),是將輸入數(shù)據(jù)轉(zhuǎn)換成領(lǐng)域?qū)ο蟮膶傩灾担ㄒ环NJava類型),一旦成功,服務(wù)器端驗(yàn)證器就會(huì)介入。也就是說,在SpringMVC框架中,先進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,再進(jìn)行服務(wù)器端驗(yàn)證。

服務(wù)器端驗(yàn)證對(duì)于系統(tǒng)的安全性、完整性、健壯性起到了至關(guān)重要的作用。在SpringMVC框架中,可以利用Spring自帶的驗(yàn)證框架驗(yàn)證數(shù)據(jù),也可以利用JSR303實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證。14.2Spring驗(yàn)證器14.2.1Validator接口

創(chuàng)建自定義Spring驗(yàn)證器,需要實(shí)現(xiàn)org.springframework.validation.Validator接口。該接口有兩個(gè)接口方法: booleansupports(Class<?>klass) voidvalidate(Objectobject,Errorserrors)supports方法返回true時(shí),驗(yàn)證器可以處理指定的Class。validate方法的功能是驗(yàn)證目標(biāo)對(duì)象object,并將驗(yàn)證錯(cuò)誤消息存入Errors對(duì)象。

往Errors對(duì)象存入錯(cuò)誤消息的方法是reject或rejectValue方法。這兩個(gè)方法的部分重載方法如下: voidreject(StringerrorCode) voidreject(StringerrorCode,StringdefaultMessage) voidrejectValue(Stringfield,StringerrorCode)voidrejectValue(Stringfield,StringerrorCode,StringdefaultMessage)

一般情況下,只需要給reject或rejectValue方法一個(gè)錯(cuò)誤代碼,SpringMVC框架就會(huì)在消息屬性文件中查找錯(cuò)誤代碼,獲取相應(yīng)錯(cuò)誤消息。具體示例如下: if(goods.getGprice()>100||goods.getGprice()<0){ errors.rejectValue("gprice","gprice.invalid");//gprice.invalid為錯(cuò)誤代碼 }14.2.2ValidationUtils類org.springframework.validation.ValidationUtils是一個(gè)工具類,該類中有幾個(gè)方法可以幫助判定值是否為空。

例如:

if(goods.getGname()==null||goods.getGname().isEmpty()){ errors.rejectValue("gname","goods.gname.required")}

上述if語句可以使用ValidationUtils類的rejectIfEmpty方法,代碼如下:

//errors為Errors對(duì)象 //gname為goods對(duì)象的屬性ValidationUtils.rejectIfEmpty(errors,"gname","goods.gname.required");14.2.3驗(yàn)證示例

本節(jié)使用一個(gè)應(yīng)用ch14a講解Spring驗(yàn)證器的編寫及使用。該應(yīng)用中有1個(gè)數(shù)據(jù)輸入頁面addGoods.jsp,效果如圖14.1所示;有1個(gè)數(shù)據(jù)顯示頁面goodsList.jsp,效果如圖14.2所示。

編寫一個(gè)實(shí)現(xiàn)org.springframework.validation.Validator接口的驗(yàn)證器類GoodsValidator,驗(yàn)證要求如下:

1.商品名和商品詳情不能為空。 2.商品價(jià)格在0-100之間。 3.創(chuàng)建日期不能在系統(tǒng)日期之后。

根據(jù)上述要求,按照如下步驟完成應(yīng)用ch14a。14.3JSR303驗(yàn)證

對(duì)于JSR303驗(yàn)證,目前有兩個(gè)實(shí)現(xiàn),一個(gè)是HibernateValidator,一個(gè)是ApacheBVal。本書采用的是HibernateValidator,注意它和Hibernate無關(guān),只是使用它進(jìn)行數(shù)據(jù)驗(yàn)證。14.3.1JSR303驗(yàn)證配置1.下載與安裝HibernateValidator

可以通過地址/projects/hibernate/files/hibernate-validator/下載HibernateValidator,本書選擇的是hibernate-validator-5.4.0.Final-dist.zip。首先,將下載的壓縮包解壓;然后,將\hibernate-validator-5.4.0.Final\dist目錄下的hibernate-validator-5.4.0.Final.jar和\hibernate-validator-5.4.0.Final\dist\lib\required目錄下的classmate-1.3.1.jar、javax.el-3.0.1-b08.jar、jboss-logging-3.3.0.Final.jar、validation-api-1.1.0.Final.jar拷貝到應(yīng)用的\WEB-INF\lib目錄下。2.配置屬性文件與驗(yàn)證器

如果將驗(yàn)證錯(cuò)誤消息放在屬性文件中,那么需要在配置文件配置屬性文件,并將屬性文件與HibernateValidator關(guān)聯(lián),具體配置代碼如下:<!--配置消息屬性文件--><beanid="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><!--資源文件名--><propertyname="basenames"><list><value>/WEB-INF/resource/errorMessages</value></list></property><!--資源文件編碼格式--><propertyname="fileEncodings"value="utf-8"/><!--對(duì)資源文件內(nèi)容緩存時(shí)間,單位秒--><propertyname="cacheSeconds"value="120"/></bean><!--注冊(cè)校驗(yàn)器--><beanid="validator"class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"><!--hibernate校驗(yàn)器--><propertyname="providerClass"value="org.hibernate.validator.HibernateValidator"/><!--指定校驗(yàn)使用的資源文件,在文件中配置校驗(yàn)錯(cuò)誤信息,如果不指定則默認(rèn)使用classpath下的ValidationMperties--><propertyname="validationMessageSource"ref="messageSource"/></bean><!--開啟spring的Valid功能--><mvc:annotation-drivenconversion-service="conversionService"validator="validator"/>14.3.2標(biāo)注類型1.空檢查@Null:驗(yàn)證對(duì)象是否為null。@NotNull:驗(yàn)證對(duì)象是否不為null,無法查檢長度為0的字符串。@NotBlank:檢查約束字符串是不是null,還有被trim后的長度是否大于0,只對(duì)字符串,且會(huì)去掉前后空格。@NotEmpty:檢查約束元素是否為null或者是empty。示例如下:@NotBlank(message="{goods.gname.required}")//goods.gname.required為屬性文件的錯(cuò)誤代碼privateStringgname;2.booelan檢查@AssertTrue:驗(yàn)證boolean屬性是否為true。@AssertFalse:驗(yàn)證boolean屬性是否為false。示例如下:@AssertTrueprivatebooleanisLogin;3.長度檢查@Size(min=,max=):驗(yàn)證對(duì)象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi)。@Length(min=,max=):驗(yàn)證字符串長度是否在給定的范圍之內(nèi)。示例如下:@Length(min=1,max=100)privateStringgdescription;4.日期檢查@Past:驗(yàn)證Date和Calendar對(duì)象是否在當(dāng)前時(shí)間之前。@Future:驗(yàn)證Date和Calendar對(duì)象是否在當(dāng)前時(shí)間之后。@Pattern:驗(yàn)證String對(duì)象是否符合正則表達(dá)式的規(guī)則。示例如下:@Past(message="{gdate.invalid}")privateDategdate;5.?dāng)?shù)值檢查@Min:驗(yàn)證Number和String對(duì)象是否大等于指定的值。@Max:驗(yàn)證Number和String對(duì)象是否小等于指定的值。@DecimalMax:被標(biāo)注的值必須不大于約束中指定的最大值,這個(gè)約束的參數(shù)是一個(gè)通過BigDecimal定義的最大值的字符串表示,小數(shù)存在精度。@DecimalMin:被標(biāo)注的值必須不小于約束中指定的最小值,這個(gè)約束的參數(shù)是一個(gè)通過BigDecimal定義的最小值的字符串表示,小數(shù)存在精度。@Digits:驗(yàn)證Number和String的構(gòu)成是否合法。@Digits(integer=,fraction=):驗(yàn)證字符串是否符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。@Range(min=,max=):檢查數(shù)字是否介于min和max之間。@Valid:對(duì)關(guān)聯(lián)對(duì)象進(jìn)行校驗(yàn),如果關(guān)聯(lián)對(duì)象是個(gè)集合或者數(shù)組,那么對(duì)其中的元素進(jìn)行校驗(yàn),如果是一個(gè)map,則對(duì)其中的值部分進(jìn)行校驗(yàn)。@CreditCardNumber:信用卡驗(yàn)證。@Email:驗(yàn)證是否是郵件地址,如果為null,不進(jìn)行驗(yàn)證,通過驗(yàn)證。示例如下:@Range(min=0,max=10

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論