00:00
好,我们接下来继续来做我们这个校验逻辑,哎,有些同学说我们校验都做了这么多了,怎么还做校验来看点击这个新增,我们现在的校验呢,大多都集中于是我们这个前端校验,比如我们来写一个张三,这个张三呢,它会发AJ请求,去数据库查用户名不可用,哎,我们这个email呢,也会进行前端校验,我点保存,哎,一点保存以后这样式好像有点不对,这个张三给success了,这个原因呢,我们来看啊,点击员工保存按钮,好,你看啊,员工一保存我们这个表单,又要一校验表单,这个校验呢是前端校验,前端校验一看张三是合法的,所以说呢,是一个成功样式,那么这一块呢,原因找到,大家呢,就下去可以细化一下显示,那么这一块呢,我们这一块前端都是校验,我点保存是不成功的,即使我们这个前端呢,我来写正确。
01:00
qq.com,比如我来点保存也是不成功的,我们再点保存没法点,没法点的因原因呢,是因为我们之前这个AJS校验把保存按钮,哎有一个标记状态叫error,所以说呢,我们数据提交不过去,包括其他的校验也都一样,在我们这个浏览器端,我们校验都是写的JS代码,所以说呢,我们想要绕过浏览器校验也非常简单,哎,我模拟来发送咱们这个用户请求,我绕过这个GS,或者呢,我们可以用户的选择性来禁用一些GS,或者呢,包括我们来看啊,我这个保存按钮,你的这个状态不是error吗?我们来就给它改成success,我点保存,诶我们来看它又进来了,所以说呢,前端校验这个啊,我们只是用来,哎相当于防君子而不防小人,而我们这个在关键数据上,我们一定要。
02:01
前端校验以后,我们后台还要进行校验,也就是说在我们这个员工保存方法,我们封装的这个employee对象,我们应该还得校验一下数据的咱们这个正确性,包括我们完整的咱们这个数据安全性的检查机制,是前端校验加上我们程序后端校验加上我们数据库的约束,我们都得写上,所以说呢,这应该是一个最安全的咱们这个校验功能,我们来说一下。好在这呢,我们这个新增的时候,哎,新增的时候呢,我们完成校验,我们现在的校验呢,我们做了一个咱们这个科瑞前端校验。和咱们这个Ajax用户名。重复校验,而这些校验呢,哎,只要用户想给你提交非法数据,那怎么都绕过了,那我们接下来呢,哎,我们应该做一个咱们这个后端校验,所以说呢,这个后端校验,哎,我们可以用MVC提供的基于GSR303来做的这个校验,303,比如说这个后端校验,我们应该在咱们这个重要的咱们这个数据啊。
03:23
我们都应该加上咱们这个后端校验重要数据,那都应该加上咱们这个后端校验,防止咱们这个用户提交非法数据,包括我们在数据库啊,我们这个,如果咱们这个用户名处,我们也应该去添加唯一约束,哎,所以说呢,这个我们整个从前到后完整的安全性规则制定好以后,这才是一个安全的咱们这个数据校验好,那么呢,我们就来看我们这个后端校验功能,来到employee对象中来,我们要使用GSR303校验也非常简单,给employee对象里边每一个我们要校验的字段加上对应的咱们这个要求就行了,诶比如呢,我们这个有一些校验规则啊,哎是它是否email啊这些,但是呢,这校验规则能支持我们这个GSR303,毕竟是一个标准,所以说呢,我们就得来说一下,要支持咱们这个GS。
04:24
啊,303校验,我们呢,需要导入咱们这个PUNE,咱们这个包。哎,它是对咱们这个GSR303的一个实现,我们来把它导入进来,在我们中央仓库中,我们来可以找一下汉门内管理,嘿,就是它把这个包我们来找到,好在这。我们来点开咱们这个harber ne data,咱们这个数据校验好下边的这个点开以后呢,5.4.1好,我们就来找到这个版本,CTRLC我复制过来,来到咱们这个POM文件中。
05:05
我们来天上。好,我们来填上咱们这个数据校验的,我们在咱们这个杰森绑定这这儿,下边我们来填上数据校验。啊,303数据校验。支持好,我们把这个填上,填上以后呢,我们来保存咱们这个问的这个依赖包里边,诶就会有haveber net validation这几个校验包,那么这几个拿过来以后呢,这一块我们还得注意一下啊,我们这个这个校验功能呢,如果是Tom k哎,七级以上的服务器。上的服务器,那么呢,我们直接在我们项目中导入这个就行了,如果是他们CAT7及以下的。其以下的以下的咱们这个服务器。
06:03
以下的咱们这个服务器,哎,因为呢,他们看到以下它的这个E表达式啊。他那不是新的标准。表达式,所以说呢,这个E的功能强大。我们需要呢,额外的给咱们这个服务器啊,不是给我们给服务器到咱们这个宝包中。包中咱们这个替换新的,咱们这个标准的,也所以说呢啊,我们这一块呢,我们就直接用Tom k7进行测试就行了,好,我们把GSR303的这些依赖包,我们导。接下来要做校验,非常简单,来到employee对象中,诶,比如我们这个员工姓名,我们的规则我来加上注解,比如它的长度什么的,哎,我们可以在这儿规定长度是多少位到多少位,但是我们的校验规则这是我们定制的,你看啊,我们这个用户名的校验规则还是挺复杂的呢啊,中英文混合啊。
07:11
包括呢,都能这么来写,所以说呢,我把这个。拿过来拿过来,这是我们的这个校验规则,这个校验规则我们自定义的话呢,哎,我们写一个pattern,哎,我们可以用这个pattern来表示我们自定义规则,自定义规则里边呢,咱们这个表达式正则表达式的这个字符串,我们可以拿过来,诶这是我们的校验规则,如果出现错误以后提示消息,哎,我们也可以定义在这。好,这个message,我们把错误的提示消息呢,来我们跟这一块统一一下好。啊,用户名呢,哎,我们就叫必须,哎必须好,那么这一块呢,这是我们这个校验规则啊,包括我们这个邮箱,诶邮箱我们来也是啊快捷的呢,大家写一个email出去,哎这个呢,也是校验一个合法的email邮箱,当然了我们前端啊,如果我们前端的正则表达式优先校验,我们写的是这样。
08:14
哎,我们也可以拿过来来注意啊,咱们这个前后的这两个斜杠不拿,剩下的拿过来,这是我们正则表达式,好CTRLC我复制过来,好我们这个可以写这个也行,那么呢,你害怕跟前端不统一了,我们就来写这个pattern这个校验规则,好我们的正则表达式。就是它,诶这个呢,上手就是一个错误,我们来看这个错误,哎这个错误呢,他说哎非法的这个字符,他不知道这些杠杠,哎你这些杠点呢,没在我们这些转移字符的列表中,所以说我们来看啊,在正则表达式中,杠点的意思就是下一个是一个真正的点,而我们以前的正则表达式这个点它有一些特殊意义,哎,它是匹配杠N之外的单个字符,所以说呢,在我们正则表达式中,这个斜杠用来标识下一个元义字符,而我们都知道在Java中这个杠是转义的,所以说呢,我们要用真正的斜杠,我们得双斜杠一下,哎,所以说我们以后啊,遇见这个单斜杠的地方,我们都双斜杠。
09:22
都双斜杠。双斜杠,那么这样写应该是正确的,那包括我们这个杠U,哎这个呢UNO的嘛,但是这个杠U啊,咱们Java是能认识的,你不用这个双斜杠,所以说我们严格一下,那双斜杠就都双斜杠好,那么呢,我们这一块呢,写好以后,哎这个正则表达式就是我们这个需要的,哎,特别是这个杠U,我们说这个双斜杠单斜杠都一样啊,因为这个杠U本来就是unco德嘛,哎答咱们这个GS里边跟我们这个扎中都能认识啊,随便怎么写,我们之前也见过了,这个杠U这么来写,我们在这儿进行校验的时候,哎,用户名在这儿校验的时候也是没问题的啊。
10:07
那么呢,我们把这个正则表达式写好,如果错误,以后message的提示。好,提示错误,以后呢,我们就来给一个邮箱,格式不正确。好,邮箱格式不正确,那么呢,这就是我们在这个上边标注了一些校验规则以及我们错误的提示信息,而我们如何校验呢?只需要在我们员工保存封装对象的时候,我们用一个非常简单的注解叫。管理的好,代表我们这个封装对象,以后我们这里边的数据要进行校验,而校验总会有成功失败,哎,我们在它后面紧跟一个帮丁result,哎,这个对象来封装我们这个校验的结果,所以说呢,我们这一块的数据即使提交在后台,我们也是需要校验的,那么这个校验呢,哎,我们就来。
11:06
注意一下,如果。咱们这个result result这个校验呢,有成功有失败,如果它里边点有一个方法叫has errors,它有咱们这个校验失败,有校验失败的话呢,我们当然就不能保存员工了,否则我们才示保存员工,哎,给他提示成功,如果校验失败我们应该,哎,不应该保存员工,应该给他返回失败,校验失败以后呢,我们来想一下这个逻辑啊,校验失败应该。返回咱们这个失败,返回失败,返回失败以后呢,还是在我们这个啊错误的对话框中显示我们后端校验失败的错误信息,在咱们这个模特框中。中显示咱们这个校验失败的,咱们这个错误信息,好,那么呢,我们要怎么显示这些错误的信息呢?也非常简单,我们从这个result中来提取一下错误信息,哎,比如呢,有一个叫get error。
12:16
Get咱们这个field error,然后呢,我们提取每一个字段的校验信息,这有呢,所有的字段的校验错误信息,好,我们把所有的拿过来,有哪些字段我们都提取出来,来便利这个L或循环。好,我们来遍利咱们这个错误信息,这个错误信息呢,那么就会有这么一些情况,比如呢输出,哎这有菲的error,它呢有一个叫get,咱们这个菲的ID,这就是呢,哪一个字段错了。啊,错误的,咱们这个字段名。包括呢,它的错误信息,我们也可以拿到咱们这个错误信息。信息我们也可以拿到,加上咱们这个F的。
13:04
第二咱们这个get default,这就能拿到它的错误信息,那这个错误信息呢,我们整个可以返回给浏览浏览器,让浏览器把这个显示出来,所以说呢啊,我们把这个错误信息的返回来封装一个map。String,然后呢,Object,我们可以把这些错误信息呢,都添加到咱们这个map中。又一个哈西。好用一个哈西曼,这个哈西曼呢啊,我们把所有的错误字段。点来,我们来put,我们每拿到一个错误字段K,就是这个错误字段的咱们这个名。Y6就是咱们这个错误字段的,咱们这个值。错误字段的,咱们这个提示信息,好这至此呢,我们这个错误的消息封装就完了以后,然后呢,我们把这个map来交给咱们这个浏览器进行显示,我们添加一个啊,我们比如呢,就叫a fieldd map a fieldd好,我们给呢,浏览器提示的啊,我们这个错误的字段,错误的字段呢,我们把这个map放进去,诶所以说呢,当我们浏览器来到页面。
14:22
我们点击保存以后,好员工的保存按钮,点击保存好,这是我们的这个员工的input框,点击保存,点击保存AJS发送保存请求,哎,保存请求这一块啊,成功以后啊,我们这个成功返回的result,它会有两种结果,第一种结果呢,是我们这个失败信息,我们保存失败了,哎,因为有一些字段没有经过校验,另外呢,就是我们这个成功信息,所以说我们这个页面不是就关闭模态框去咱们这个最后一页了,而是我们要进行判断,判断如果我们的返回结果中。
15:02
它的状态码这个扣的呢,哎,我们都知道这个状态码,如果它是咱们这个100,我们来看啊,如果是100就是成功,200就是失败,所以说呢,如果状态码来到页面,如果状态码它是100成功了啊,我们才关闭模态框进行这些操作。否则那就表明用户校验失败了,失败以后呢,我们就应该显示。咱们这个失败信息,失败信息好,我先告诉点log,我们在控制台先把咱们这个失败以后,咱返回的杰森字符串,我先拿到来,先来看这个逻辑对不对,走。然后呢,前后端校验我们都加上,都加上以后呢,我来点保存啊,我们来点刷新,好刷新我们来测试一下啊,我点新增,我们先来测试一个保存成功的,比如A。
16:06
好,这呢用户名不可用,那六个A,好,这个用户名AJS校验是可用的,我来也输一个对的,测试部女点保存。哎,这是成功的,那么呢,我我们来模拟把咱们这个前端校验给失败了,我把这个前端校验,比如我们员工保存的时候,好,我把前端校验这个逻辑我给去掉,就说呢,我们来模拟用户绕过了前端校验,非法的进行提交,我来测试。刷新好,我重新点新增,那么呢,我们来输入一个啊BBBBB好六个B,那么这个用户名也是可用的,那么呢,我们email好我email我错误的输入好F12控制台先打开啊,我错误的输入一个email,假设呢,用户要绕过了这个验证,那我点保存好,应该我们来看。
17:01
点保存以后,发送了一个保存的AJ请求,但是呢,服务端进行校验了,处理失败,失败的错误信息呢,在errors的里边封装这,封装这呢,有一个叫email邮箱格式不正确,所以说呢,即使用户啊绕过了咱们这个前端校验,那么我们也能处理成功,我们接下来呢,就是在这儿,我把这个前端校验呢,还是先放在这儿,我们在这儿显示失败信息就行了。这个失败信息呢,啊,主要集中在两点,这个用户名和咱们这个email的这个校验上,所以说呢,我们来看啊,来我们来看,如果有一半的错误信息,也就是说有哪个。有哪个咱们这个字段的错误信息,就显示哪个字段,那么这个也非常方便,我们就来判断判断我们这个,呃,返回过来的这个result里边extend,好,我们就来判断里边的这个extend extend里边呢。
18:13
会有一个afis。安装它这个错误字段,错误字段里边我们就来看有没有email属性。哎,Email属性的值我们先来看啊。拉一下email。那么我们再来aler一下,如果是我们员工的姓名,我们来看这两个的属性啊,这两个属性的值都是什么?你看啊,我们现在只是邮箱有这个邮箱的校验错误,我们没有员工的名字,我们来看一下会是什么好。Bbb还是六个B,好,我们来绕过好,这个A我点保存好,你看啊,如果有我们这个邮箱信息,它会弹出邮箱格式不正确,但是呢,我们没有那个员工的错误,那么这个员工就是underfa,所以说我们这一块只需要一个简单的判断,如果呀。
19:10
我们这个on five on,如果我们这个未定义,哎,我们这个员工的邮箱,哎。不是未定义,那我们呢,就是显示员工的邮箱错误信息。邮箱。错误信息,邮箱错误信息。而同样的道理,如果我们这个。他带了员工的这个啊,名字的错误信息,我们就来显示员工,那么这名字的错误信息,好那么呢,我们就来把这两个错误信息我们拿出来,好,这个显示错误信息,哎,我们也都抽取成方法了,我们来看啊,在我们之前叫受validate message,你要显示的哪个元素的错误信息,诶这是咱们这邮箱的输入框。
20:11
我把这个拿过来显示错误信息,好,我们在这显示邮箱的错误信息,哎,这应该是一个错误,Error。加入错误信息是什么呢?就是我们拿出邮箱的这个错误信息提示值,那么呢,员工的这个错误信息,如果有我们就一样显示咱们这个员工名字的错误信息,员工名字的错误信息,哎,就是拿出员工名字的这个值,嗯,名字的这个input框来找一下啊,员工名字错误信息,好,员工名字错误信息之前的显示在这。过来。好,那么这个员工名字。好,我们这个呢,就写成这样子了,我们还是一样测试的时候呢,我把这个前端校验啊,在这块我先注掉了。
21:06
我来刷新,我们来看啊。走。好,我来BB哔哔B,好六个B用户名是可用的,但是呢,邮箱是错误的,好,我们把前端校验给注掉了,我点保存,诶同样还我们这个数据库,哎,我们这个服务端也进行了校验,把错误消息拿到给我们显示了,所以说呢啊,我们这一块呢,我们是呃绕过前端校验,我是直接把这段代码注掉了,即使用户呢,去模拟的发送我们这个请求,他绕过了前端校验也没问题,我们后端还会校验,所以说呢,这样我们就保存了数据完整的安全性,当然了,我们这个用户名啊,应该也在数据库创建的时候就来约束用户名不能重复,这块呢就最好不过了,大家下边把这个约束可以加上,完善这个逻辑。
我来说两句