服务器端输入验证
一、沒有使用框架情況下,在目標方法處,通過手動的編寫代碼來進行驗證
二、Struts2
1.支持聲明式驗證,即通過配置的方式來驗證。需要實現接口?ValidationAware,依賴于兩個攔截器?validation 和?workflow 攔截器。
validation 攔截器:進行驗證和創建字段錯誤列表
workflow ?攔截器:檢查 validation 攔截器發現的錯誤,如果發現,返回 "input"(默認)result。
如果沒有指定 name=input 對應的 result ,則返回一個錯誤消息告訴我們 "there's no "input" result defined for the action"。
2. Struts2 默認的驗證器
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator Definition 1.0//EN""http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"><validators><validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/><validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/><validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/><validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/><validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/><validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/><validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/><validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/><validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/><validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/><validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/><validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/><validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/><validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/><validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/><validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators>3.驗證規則配置文件
(1)位置:在需要驗證的 Action 同包下。
(2)當前 Action 類所有 action 使用同樣的驗證規則:Action簡單類名-validation.xml
(3)當前 Action 類某個 action 使用具體的驗證規則:Action簡單類名-ActionName-validation.xml
4. 驗證分類
(1)字段驗證(Field Validator Syntax)
e1:驗證?myPurchaseCode 字段長度必須為10
<validators><field name="myPurchaseCode"><field-validator type="stringlength"><param name="minLength">10</param><param name="maxLength">10</param><param name="trim">true</param><message>Your purchase code needs to be 10 characters long</message></field-validator></field> </validators>e1:驗證 age 必須在 20 到 50 之間
<validators><field name="age"><field-validator type="int"><param name="min">20</param><param name="max">50</param><message>Age needs to be between ${min} and ${max}</message></field-validator></field> </validators>(2)類型驗證(Plain Validator Syntax)
e1:驗證?myPurchaseCode 字段長度必須為10:
<validators><validator type="stringlength"><param name="fieldName">myPurchaseCode</param><param name="minLength">10</param><param name="maxLength">10</param><param name="trim">true</param><message>Your purchase code needs to be 10 characters long</message></validator> </validators>e2:驗證 age 必須在 20 到 50 之間
<validators><validator type="int"><param name="fieldName">age</param><param name="min">20</param><param name="max">50</param><message>Age needs to be between ${min} and ${max}</message></validator> </validators>(3)表達式驗證
e:判斷密碼和確認密碼輸入是否一致
<validators><validator type="expression"><param name="expression"><![CDATA[pwd==pwdConfirm]]></param><message>密碼和確認密碼不一致</message></validator> </validators>其中:<param name="expression"> 標簽體中的內容會自動進行 OGNL 解析。
5.短路驗證:
對于同一個字段進行多個規則驗證,如果第一個驗證沒有通過,則后續的規則不進行驗證。
只需要在?validator 或 field-validator 標簽內加入 short-circuit 屬性并設置為 true 即可。
如:
<validators><field name="email"><field-validator type="stringlength" short-circuit="true"><param name="minLength">4</param><param name="maxLength">10</param><param name="trim">true</param><message>email length must between ${minLength} and ${maxLength}</message></field-validator><field-validator type="email"><message>Must provide a valid email</message></field-validator></field> </validators> email validate6.類型轉換失敗提示與驗證出錯提示消息
struts2 默認的攔截器棧為?defaultStack,規定了?conversionError 攔截器在?validation 攔截器之前執行。但是?conversionError 攔截器攔截到類型轉換出錯的消息,并不會返回 "input",而是繼續讓proxy調用后續的攔截器。
這里的源碼我們不能進行更改,但是我們可以仿造一個,類的加載順序是采取的就近原則。所以我們在項目的 src 目錄下,新建與?conversionError 攔截器對應的目錄結構,然后修改?conversionError 攔截器代碼。
7.對 Action 類的要求
要驗證的字段,必須提供 getXxx() 和 setXxx() 方法,getXxx() 方法用于 validate 攔截器進行比較驗證。
8.一個簡單的例子:
<s:form action="/validateNum"><s:textfield name="age" label="age"/><s:submit label="submit"/> </s:form> form 表單 <!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.2//EN""http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><validators><field name="age"><field-validator type="int"><param name="min">20</param><param name="max">50</param><message>Age needs to be between ${min} and ${max}</message></field-validator></field> </validators> ValidateAction-validation.xml <struts><package name="default" namespace="/" extends="struts-default"><action name="validateNum" class="com.nucsoft.struts.ValidateAction"><result>/success.jsp</result><result name="input">/index.jsp</result></action> </struts> struts.xml9.自定義驗證器
(1)普通的驗證器繼承?ValidatorSupport 類,字段驗證程序繼承?FieldValidatorSupport。如需要提供參數,提供 setXxx() 方法,如錯誤消息要獲取驗證器類中的屬性,提供對應的 getXxx() 方法。
(2)注冊驗證器類:在類路徑根目錄下新建?validators.xml ,內容可以參考?default.xml 文件里的配置信息。(驗證框架首先在根目錄下查找validators.xml文件,找不到則調用默認的驗證設置)
(3)正常使用
10.編程式驗證:
Struts2提供了一個 Validateable 接口,Action 類可以實現這個接口中的 validate() 方法,在其中編寫驗證邏輯。ActionSupport 類已經實現了 Validateable 接口。
?
?
?
?
?
?
?
未完,待續
轉載于:https://www.cnblogs.com/solverpeng/p/5661233.html
總結
- 上一篇: _fastcall
- 下一篇: 微信OPENID授权方法