校验框架

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Action类继承ActionSupport类,struts.xml中添加input的result 视图。 • 验证失败后,请求转发至input视图

重写validateXxx()方法

通过validateXxx()方法实现, validateXxx()只会校验action 中方法名为Xxx的方法。其中Xxx的第一个字母要大写。 当某个数据校验失败时,我们应该调用addFieldError()方法 往系统的fieldErrors添加校验失败信息(为了使用 addFieldError()方法,action可以继承ActionSupport )。 如果系统的fieldErrors包含失败信息,struts2会将请求转发 到名为input的result。在input视图中可以通过 <s:fielderror/>显示失败信息。
客户端校验
• 用JavaScript进行客户端校验: – 编写校验方法 – 在提交表单的事件中调用校验方法校验 – 根据校验方法来判断是否进行表单提交
服务器端校验
• 服务器端校验对于系统的安全性、完整性、健壮性起到了
至关重要的作用。
• Struts 2框架是非常强大的,它提供了一套验证框架,通过验
– 方式二:重写validateXxx()方法:validateXxx()只会
重写validate()方法

validate()方法会校验action中所有与execute方法签名相同的 方法。 当某个数据校验失败时,我们应该调用addFieldError()方法 往系统的fieldErrors添加校验失败信息(为了使用 addFieldError()方法,action可以继承ActionSupport ) 如果系统的fieldErrors包含失败信息,struts2会将请求转发 到名为input的result。在input视图中可以通过 <s:fielderror/>显示失败信息。
Struts2内置的校验器
– double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围
– fieldexpression(字段OGNL表达式校验器,要求field满足一个
内,min指定最小值,max指定最大值)
ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于 ValueStack进行求值,返回true时校验通过,否则不通过) – email(邮件地址校验器,要求如果field的值非空,则必须是合法的 邮件地址) – url(网址校验器,要求如果field的值非空,则必须是合法的url地址) – date(日期校验器,要求field的日期值必须在指定范围内,min指定 最小值,max指定最大值) – conversion(转换校验器,指定在类型转换失败时,提示的错误信息 ) – visitor(用于校验action中的复合属性,它指定一个校验文件用于 校验复合属性中的属性) – expression(OGNL表达式校验器,expression参数指定ognl表达 式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过 ,否则不通过,该校验器不可用在字段校验器风格的配置中)
证框架能够非常简单和快速地完成输入校验。
• Struts2 主要通过验证框架来完成数据验证。 • Action必须继承ActionSupport类。 • 对于输入校验struts2提供了两种实现方法:
1. 采用手工编写代码实现。(手工编程) 2. 基于XML配置方式实现。(Struts2校验框架)
• 在struts2中,我们可以实现对action的所有方法进行校验或
输入校验的流程
对请求参数进行类型转换
转换是否成功
将转换错误保存在ActionContext中
执行ValidateXxx方法
从ConversionErrors中取出 类型转换错 误,并将其转换成字段错误(FieldError)
执行Validate方法
是否有字段错误
直接返回input结果 转入相应的web资源
– 方式二:校验action的某个与execute方法签名相同方法。


Struts2内置的校验器
• Struts 2提供了非常多的默认校验器。在开发中使用内置的校验
器能满足大部分的校验需求。这些校验器的定义可以在xwork2.x.jar中的com.opensymphony.xwork2.validator.validators 下的default.xml中找到。 • 系统提供的内置校验器如下:
校验框架
校验框架
• 本章内容
输入校验概述 手动编程校验 校验框架校验
输入校验的概念
• 输入校验,从字面上来看好像是指对如输入的密码或者用户名
输入错误的校验。其实这个不算输入校验,这个算是业务逻辑 的判断了。输入校验是对输入的用户名长度、密码长度、年龄 信息等的判断。为了给大家一个感官上的认识,现在打开163 邮箱的注册页面,如下图所示。
<action name="val_*" class="com.nuesoft.validate.LoginAction“
method="{1}"> <result name="message">/index.jsp</result> <result name="input">/login.jsp</result> </action> </package>
Biblioteka Baidu
常用的内置校验器的应用
• required 必填校验器
<field-validator type="required"> <message>性别不能为空!</message>

requiredstring 必填字符串校验器
<field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator>
}
}}
• •
Action类继承ActionSupport类,struts.xml中添加input的result视图, 验证失败后,请求转发至input视图
输入校验的流程
1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action 中的属性。 2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到 ActionContext,conversionError拦截器将异常信息添加到 fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方 法名。
4、再调用action中的validate()方法。 5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错 误信息的集合的size大于0),系统自动将请求转发至名称为input的 视图。如果系统中的fieldErrors没有任何错误信息,系统将执行 action中的处理方法。
者对action的指定方法进行校验。
校验框架
• 本章内容

输入校验概述 手动编程校验 校验框架校验
手动编程校验
• 手动编程方式:主要是通过在类中编写校验逻辑代码。
• 手动编程方式 – 方式一:重写validate()方法: validate()方法会校验
action中所有与execute方法签名相同的方法。 校验action中方法名为Xxx的方法。
<action name="val_*" class="com.nuesoft.validate.LoginAction“
method="{1}"> <result name="message">/index.jsp</result> <result name="input">/login.jsp</result> </action> </package>
– required (必填校验器,要求field的值不能为null) – requiredstring (必填字符串校验器,要求field的值不能为null,并且
长度大于0,默认情况下会对字符串去前后空格) – stringlength(字符串长度校验器,要求field的值必须在指定的范围内 ,否则校验失败,minLength参数指定最小长度,maxLength参数指定 最大长度,trim参数指定校验field之前是否去除字符串前后的空格) – regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达 式.expression参数指定正则表达式,caseSensitive参数指定进行正 则表达式匹配时,是否区分大小写,默认值为true) – int(整数校验器,要求field的整数值必须在指定范围内,min指定最小 值,max指定最大值)
调用Action的处理方法
Action处理方法返回结果
校验框架
• 本章内容
输入校验概述 手动编程校验 校验框架校验
校验框架概述

使用struts2校验框架:把校验逻辑放到配置文件中,实现校验逻辑 代码与业务逻辑代码的分离。 使用基于校验框架校验方式实现输入校验时,Action也需要继承 ActionSupport,并且提供校验文件。 框架校验方式 – 方式一:校验action中所有与execute方法签名相同的方法 。


重写validate()方法
public void validate() { if(username.trim().equals("") || username==null) { this.addFieldError("username", "用户名不能为空"); } if(password.trim().equals("") || password==null) { this.addFieldError("password", "密码不能为空"); }else { if(password.length()<6 || password.length()>12) { this.addFieldError("password", "密码的长度在6--12位之间"); } } } <package name="val" namespace="/val" extends="strutsdefault"> <constant name="struts.devMode" value="true" />


重写validateXxx()方法
public void validateUpdate()
{ //对某个特定的方法进行验证 if(username.trim().equals("") || username==null) { this.addFieldError("username", "用户名不能为空"); } if(password.trim().equals("") || password==null) { this.addFieldError("password", "密码不能为空"); }else { if(password.length()<6 || password.length()>12) { this.addFieldError("password", "密码的长度在6--12位之间"); <package name="val" namespace="/val" extends="strutsdefault"> <constant name="struts.devMode" value="true" />
输入校验的概念
输入校验的必要性
• 所有用户的输入都是邪恶的,为了保证数据的合法性,输入校
验就显得尤为重要。
校验的方式
• 输入校验分为客户端校验和服务器端校验。 – 客户端校验可以过滤掉用户的错误操作,是第一道防线
,一般使用JavaScript代码实现。 – 仅有客户端验证还是不够的。攻击者还可以绕过客户端 校验直接进行非法输入,这样可能会引起系统的异常, 为了确保数据的合法性,防止用户通过非正常手段提交 错误信息。所以必须加上服务器端的验证。
相关文档
最新文档