Struts2输入校验.ppt

上传人:小飞机 文档编号:6521452 上传时间:2023-11-08 格式:PPT 页数:21 大小:668KB
返回 下载 相关 举报
Struts2输入校验.ppt_第1页
第1页 / 共21页
Struts2输入校验.ppt_第2页
第2页 / 共21页
Struts2输入校验.ppt_第3页
第3页 / 共21页
Struts2输入校验.ppt_第4页
第4页 / 共21页
Struts2输入校验.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《Struts2输入校验.ppt》由会员分享,可在线阅读,更多相关《Struts2输入校验.ppt(21页珍藏版)》请在三一办公上搜索。

1、第4章 Struts 2输入校验,输入校验分为客户端校验和服务器端校验。客户端校验可以过滤掉用户的错误操作,是第一道防线,一般使用JavaScript代码实现。仅有客户端验证还是不够的。攻击者还可以绕过客户端校验直接进行非法输入,这样可能会引起系统的异常,所以必须加上服务器端的验证。但仅有服务器端验证也是不行的,客户的错误操作总是提交到服务器,由服务器端进行验证返回错误信息,这样会加重服务器的负担。所以客户端验证和服务器端验证缺一不可,两者结合起来才可以构建健壮的系统。,4.1 输入校验的意义,4.1.1 什么是输入校验4.1.2 为什么要进行输入校验,4.1.1 什么是输入校验,输入校验,从

2、字面上来看好像是指对如输入的密码或者用户名输入错误的校验。其实这个不算输入校验,这个算是业务逻辑的判断了。输入校验是对输入的用户名长度、密码长度、年龄信息等的判断。为了给大家一个感官上的认识,现在打开163邮箱的注册页面,如图4-1所示。,4.1.2 为什么要进行输入校验,那为什么要进行输入校验呢?使用它有什么好处呢?为了更好地说明,来看下面这个注册页面,如图4-3所示。现在按常规输入用户注册信息,单击“注册”按钮进行注册。页面跳转到注册信息显示页,如图4-4所示。,4.2 客户端校验,输入校验分为客户端校验和服务器端校验。客户端校验可以过滤掉用户的错误操作,是第一道防线,一般使用JavaSc

3、ript代码实现。下面介绍如何通过编写JavaScript来实现客户端校验。,4.2.1 正则表达式,客户端校验一般都使用JavaScript来进行输入的校验。JavaScript对输入判断都会使用到正则表达式。正则表达式是字符串处理的利器,功能非常强大。正则表达式的功能非常强大,通过它可以进行字符串匹配、字符串查找、字符串替换。今天重点介绍字符串的匹配功能,字符串的匹配功能对于输入校验提供了很大的帮助。先看下面简单的正则表达式的示例。正则表达式:a.b匹配abb,acb,等“.“是正则表达式的特殊字符,它的含义是匹配所有的字符还有空格和Tab键。,4.2.2 JavaScript中使用正则表

4、达式,下面以一个简单示例来介绍在JavaScript中使用正则表达式进行字符串匹配。程序要求必须输入数字,如果输入的不是数字就弹出提示,代码如下所示。,4.2.3 JavaScript完成客户端校验,现在为注册示例添加客户端校验功能。首先来看下有哪些输入校验规则。(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、不是,因为并不是每个用户都有这样恶意侵入的想法。大部分的用户都是采用的正常的输入,使用客户端校验能够过滤掉用户的错误操作。如果没有客户端校验,那么就算用户只是一个错误的操作,服务器端就要对其输入的信息进行处理并返回错误提示,这样会大大增加服务器端的负载。客户端校验就像是一把锁,能够防君子但是不能防小人。同样客户端校验和服务器端校验是紧密结合的,两者缺一不可。,4.3.2 完成服务器端输入校验,现在以上面那个示例的要求来添加服务器端校验。为了能更好地观察服务器端输出的错误信息,暂时不使用客户端的校验代码。这里只是暂时地去掉客户端校验代码,这样才能更好地查看服务端校验的效果。步骤如下所示。首先新建

8、一个用户注册页。在输入页中除了输入表单外,添加一个标签用来输出actionerror中的错误信息。,4.3.3 测试服务器端输入校验,现在打开用户注册页,不输入任何数据,单击“提交”按钮,页面将提示按要求进行输入的错误信息,如图4-10所示。因为程序要求输入用户名、密码、确认密码必须输入,所以会提示要求用户进行输入。同样假如输入错误非法的出生日期。如“1000-02-03”时,单击“提交”按钮,页面将会提示要求用户输入有效的出生日期,如图4-11所示。,4.3.4 使页面保留提交信息,如果希望表单中能够保留提交的信息,可以在表单的每个元素中添加value属性,并设置值,如下所示。,4.3.5

9、使用addFieldError来添加错误信息,在前面介绍了使用actionError来保存输入校验错误提示信息。actionError其实就是一个ArrayList,将错误信息保存在actionError中,其实就是保存在一个ArrayList中。前面曾讲过类型转换的错误信息是保存在fieldError中,同样输入校验的错误信息也可以通过addFieldError方法来保存到fieldError中。fieldError和actionError不同的是,fieldError是采用Map结构来存储的,所以都是以键值对来保存信息。那到底是使用fieldError来保存错误提示信息还是使用action

10、Error好呢?这个就依据项目具体要求而定了,如果只是希望在页面中单纯的显示错误提示信息,可以使用actionError来保存错误提示信息;如果希望在相应的文本框中显示错误提示信息,则需要使用fieldError来保存错误提示信息。下面来看如何将错误提示信息保存到fieldError中。首先可以使用addFieldError方法来替代addActionError方法,从而将错误提示信息保存到fieldError中。其中addFieldError方法中包含两个参数,第一个参数用来输入参数名(也可以说是Action中属性名或者说是表单元素中的name属性值),第二个参数用来输入校验错误提示信息。,

11、4.3.6 输入校验与类型转换关系,下面来看输入校验和类型转换之间的关系。首先打开上面的注册页面,在年龄文本框中输入一个非法的信息,如“aa”。这时页面将显示错误信息,如图4-16所示。,4.4 动态方法调用以及校验动态方法,Struts 2允许在一个Action中包含多个处理逻辑,从而通过调用Action中不同的方法来处理请求。同样对于每个处理逻辑,都可以提供相应的校验方法。下面介绍如何添加动态方法调用以及校验动态方法的使用。,4.4.1 动态方法调用,Struts 2允许在一个Action中包含多个处理逻辑。例如在同一个表单中,用户通过不同的按钮提交表单时,在Action中调用不同的方法来

12、处理请求。下面来看一个简单示例。首先新建如下的JSP页面。该页面同前面的用户注册页非常类似,不同的是增加了一个删除按钮,代码如下所示。,4.4.2 为action元素指定method属性,上次通过在“删除”按钮中指定其action属性值为register!deleteUser,从而示将表单提交给配置名为regist的Action的deleteUser方法来处理。发现指定action属性值为register!deleteUser这样的方式比较麻烦。如果能够像“注册”按钮那样直接提交给一个register应该会比较好一点。这个时候要借助于struts.xml配置文件了。在元素中指定action的m

13、ethod属性,则可以让Action类调用指定的方法,代码如下所示。通过这种方法,就好比将一个Action定义成了多个逻辑上的Action,Action类的每个处理方法被映射成一个逻辑Action。,4.4.3 校验动态方法,前面介绍的在一个Action中包含多个处理逻辑,不同处理逻辑对应不同的方法。那如何定义输入校验来校验这些处理逻辑呢?下面来看一个简单示例,首先将上一示例中的Action中添加一个validate()方法,该方法将在控制台上简单的打印一句话,代码如下所示。public void validate()System.out.println(validate method);这里

14、为了简单测试,并不输入任何的用户信息。直接单击“注册”按钮,在控制台将打印如下语句:validate methodexecute method从控制台打印的语句可以看出,在Action中首先执行了validate()校验方法,然后再执行execute()处理逻辑方法。如果单击“删除”按钮,在控制台将打印如下语句。validate methoddelete method,4.4.4 Struts 2输入校验流程,为了能够更加了解输入校验的流程,下面来看输入校验的程序流程图,如图4-19所示。,4.5 小结,本章首先介绍了什么是输入校验,为什么要进行输入校验。介绍了输入校验的两种实现方式,一种是客户端校验,另一种是服务器端校验。详细介绍了如何通过JavaScript代码来实现客户端校验。同样对于服务器端校验展开了详细的介绍和说明。介绍了通过addActionError()方法和addFieldError()方法来添加校验错误提示信息。最后介绍了如何实现动态方法调用以及如何校验动态方法。本章实现的输入校验都是通过手动编写校验代码来实现的,在下一章将介绍如何通过Struts 2提供的校验框架来完成校验。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号