jiahaipeng

我要飞得更高
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

验证失败:<br> 一、事件   

    几乎在所有的系统中,为了保证数据库中数据的规范,在保存数据库的时候都会做数据规范性的验证。比如,某一项不能为空,邮箱必须符合规则等。这种验证有客户端验证和服务器端验证,对于正常的操作,客户端验证就足够了。但是,对于恶意操作,仅仅是客户端验证是远远不够的,因为这些恶意操作会绕过客户端验证,这样我们数据库的数据就会失去意义。因为我们必须加上严格的服务器端验证。

二、响应事件   

    我要的服务器端验证器,必须实现以下两个功能:

  1. 能够任意添加验证条件。
  2. 当验证失败时,抛出异常,并给出正确的异常信息。

     有了这个需求,就可以定制自己的服务端验证器了。

     首先,我们需要三个类:Validater,ValidateResult,和ValidateFailException.主要功能如下:

  1. Validater是我们的验证器,实现功能添加验证条件和验证,并返回验证结果(ValidateResult)。
  2. ValidateResult是验证结果,判断验证是否成功,并返回验证结果信息。
  3. ValidateFailException定制异常,抛出我们希望的异常。

三、实现事件

    分别实现这三个类, 代码如下:

    Validater类:

Code

    ValidateResult类: 

Code

   ValidateFailException

Code

 

四、应用

    首先虚拟一个环境,要保存一个人的姓名和工资,且两者都不能为空。假设已经绕过客户端验证,直接执行服务器端验证。当为空时,抛出异常。

    我们定义一个Entity类,这个类实现的功能就是保存和验证。Person类继承预Entity类。

    首先Entity类

Code

   Person类

Code

   写一个页面,当点击Button时,触发验证操作。

   页面代码:

Code

   后台代码:

Code

    当点击页面的按钮时,就会触发验证操作,抛出如下异常:

验证失败:
名称不能为空
工资不能为空

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: Comman.validate.ValidateFailExcetion: 验证失败:
名称不能为空
工资不能为空

 

五、完成

   这样就完成了一个服务器端验证器,实现了严格的验证,保证数据库数据的规范。