00:00
下面呢,我们来看利用session如何实现一次性的验证码,验证码呢,这个我们在现在的这个,呃,平常的这个上网的过程中已经看见过很多次了,基本上。呃,很多时候都会有一个验证码,比方说你需要提一个表单啦,你需要这个做一个登录啦,只要你需要做一个请求的话,有的时候都会出现一个验证码,为什么会有这个验证码呀。它防止恶意提交是吧是吧,它防止恶意提交,因为比方说我写一个for循环,我不停的向一个地儿去提交一个请求,然后那个参数呢,我是以get的方式去传递的,这个时候如果你要是写一个for循环,你无穷的去提交的话,很麻烦。很麻烦,所以说我怎么办呢?我在你提交的时候啊,我让你随机输入一个验证码,那这个验证码是一个图片,你必须得把这个验证码输进去,后台那个程序跟这个图片,呃,跟图片里边这个,嗯。
01:08
字符串一致的话才可以提交,这个时候呢,就有效的降低了这种恶意提交,恶意访问,但实际上呢,有技术可以把这个图片里边的这个字母给它读出来,所以说你看到我们这个图片里边为什么会有一些这个,比方说有一些其他的什么竖线呢,小点点啊,起一些干扰的作用,但它依旧不是决定性的。你依旧是可以把这个图片的信息读出来,但是从这个已经从很大程度上可以来防止恶意提交了,那我们看一看这个应该如何来完成。叫验证码check。好了,我也来写一个这样的GSP。
02:05
只不过这个GP啊,特点是什么呀,没有这些了。嗯,这个也。这个有这个没有了。它有一个什么呀,它有一个嗯,验证码叫片后好了,这验证码的话呢,是一个图片。那这个图片怎么生,图片怎么生成呢?在账号里面,我现在的话呢,我先给大家一个现成的一个这个类,让我们用叫validate cover so,我先复制过来,我们先看它哈,直接复制到这个下边。以前在权志的时候写的。
03:04
好,然后呢,我们来把这个给他,嗯,看一下。这个拿过来CTRLC。这是一个so,你怎么你得你得映射一下吧,要我不能用啊so。A name。Validate。Color。So plus。保存。So mapping。URL pon斜杠。
04:00
CC怎么用呢?你直接把这个C放到这个里面。还是个啊,还得输入这个没办法来。Name后边有个什么呀,后边会有一个图片。Image s RC。给他保存看一下。得写什么呢?得写绝对路径吧,否则的话呢,是一个相对路径。request.fat context。Pass。目录下的。保存好,跑起来。
05:03
没有啊,写的不对呗,看看。So,这是根目录下的。右键文件。哦,不应该加K是吧。保存在哪?等待第一次有点慢,因为你是请求一个so嘛,哎,下次的话呢,每次请求比较快了是吧,那就可以,哎这里边的话呢,我们可以在这里边干什么呀。这里边详细的解释的话,我们不解释了啊,我可以告诉你,我们可以说呃,字字符的这个个数,我们都可以给它进行原定一万分是六个。保存。
06:00
重新加载一下,包括。是不是六个了啊,那么FCNDDG行。包括什么呀,包括我们刚才说的里边这个干扰线的这个数量,我们都可以写干扰线的数量。干扰线的在哪呢?15条。这块把这个改为55。没事儿,他能看得清。没有重新加载啊,等一下。
07:01
说比以前多了,但是还能够看得清清,基本上就是这样一个意思吧。好了,那下面的话呢,我们要看一下这个实现原理是什么,就是说呀,这个现在已经现成的这个实现原理是什么呢。我告诉你这个实现原理跟表单重复提交一样一样。那表单重复提交呢?这个字符串是写在一个隐藏域里边,只不过现在这个字符串需要你自个儿去填罢了,此外的都一样。这个需要你自个儿填,而表单重复提交是放在隐藏域里边,那我也同样需要把这个表单提到目标的,So,我同样都需要去比对你填的这个值跟这个一不一样吧,那我怎么知道跟这个一不一样呢?我必须把这个值先放到。三一。
08:00
是这样吧,所以说这个原理和表单重复提交一样一样。四。使用。3HTTP session。实现验证码。好了,我们直接说基本原理。这个为什么就不说了哈,因为这个的话呢,现在因为太多了,主要是为了防止恶意的提交。比方说你写个for循环去提交,那这个时候我服务器根本就扛不住,这个时候的话呢,会有这么一个东西,而且是用图片的,你来读我图片里边的这个内容,这个时候是比较难的,我们直接说原理,这个原理呢,我们讲和。
09:01
表单重复提交一致一样好了,那具体步骤。CTRLC过来,Ctrl v one啊,第一个在原始页面生成一个。呃,随机嘛。随机。验证码。验证码的。图片,但是光生成图片不够,我在生成这个图片的同时看生成。图片的同时,需要把该。图片中的。字符串放入到。
10:01
39放这个里边好了,然后呢在表盘页面。定义一个。定义。一个文本域用于什么呢?用于呃,输入。验证码行了,你看哈,这个时候的话呢,这样是吧,我这个图片产生,同时我已经把这个图片的这个字符串放入到我的那个。Session里边了,然后的话呢,你你这个再一输,我一点提交,我获取这个值,我从赛里面再获取这个值,我一比是不是就可以了呀?好了,那so获取session和表单预种。
11:00
表单域中的呃,验证码,验证码的值啊,比较两个值是不是一致,若一致受理请求,而且把三神域中的表单,把三神域中的表单的验证码清除。请主若不一致,直接响应。若不一致,直接。响应。我们直接通过通过这个吧,通过。表单通过重镜像从。In项的方式返回原页面原表单页面并提示。并提示用户什么呀叫。
12:02
验证码错误,验证码错误这就可以了,所以说整个这个原理的话呢,跟我们表单提交,表单公布提交基本上是一模一样的。那区别是什么呢?表单重复提交,那个只是放在一个隐藏域里边,而我们现在这个只是需要我们自个儿输。好了。然后就可以了。大家来实现一下吧。一起实现。找到这个。So,你们找什么呀,我们得去找怎么产生的随机数写了哈,这是随机数字,把这个数字呢,嗯,写到什么呀,写到我们这个。呃,图片里边去就是一个一个随机数,实际上大家看到这83行的话呢,我是不是已经准备好了这个string buff啊。
13:06
准备好了string buffer,然后呢,我们需要做的是把这个随机数放到我们的string buffer的这个包里,不来是吧?放什么呢?放的就是这个。Str随机的字符串放里好了,把正在产生的随机伺服放入到。四八分钟。然后呢?再写一个,再把。存放有所有随机字符。随机字符的。
14:05
对应的字符放入到。HTTP中好了,request.that session set attribute。见,也写个global一会儿。值就是哪个呀,就是r code.to string,你要写个to string的话,因为本身这个夹伙是啥呀,本身这个夹伙是一个4B伏,把它放好之后的话呢,我们也像前面一样写个什么呢。写一个常量。嗯。Final。比方说,Check code等于。
15:11
没看。想好了。好吧,这写完之后的话,这就完事了啊,这块的话呢,有一个code这个名字呢,我们写的也专业一点是吧,写成这个。Paramo name。OK,好了,这是天池,然后CC到目标,这提到哪呀,Co这个不合适了啊,提到check code check。Cold so。CC。
16:15
Pose的方法。周地拿下来。怎么写啊,我们把前边在那个特pro那个代码这边我们完全写一遍,第一步获取。请求参数具体是谁呀?不是,他具体是。Close other。这个吧。这个所对应的解读参数。好,第二步获取。三中的什么什么属性值什么什么属性值,属性值什么什么呀,保存。
17:14
收这属性值。是吧,三。比对吧,比对看是否一致,看是否一致。若一致。说明。呃,验证码正确验证码。正确。若。不一致说明验证码错误就完了呗。第一个呢?是真的。等于request这个值。
18:01
第二个,真的。Section code等于request get session.get tri,谁啊?CTRLCCTRLV,好了,我们先打一遍。七三。先打一遍,第一个打一个。第二个打一个section。我们说if。什么时候呢,说如果Co点那不等于,那必须有一个不等于空,等于空肯定不行,不等于空,然后呢,而且。而且code.equals跟second code相等,这就OK吧,这个是OK的,除了这个以外的话呢,都不行,于是我把整个这个。
19:15
取个反是不是不行啊,告这是什么不行,这是不一致的情况。不一致的情况的话呢,怎么办呢。响应点响应不行。想哪个页面呢?还应该想用这个页面来。点pass加。Check。下边的啊。好了,问题是我去这个页面的话,你是不是要给我一个这个消息啊,告诉我验证码是错误的,这个时候呢,我们可以直接把这个消息放到这种放水看你不还好使吗。
20:09
不行吧,因为你底下是不是可令项,所以说这个时候的话,我们直接把这个放到section里边去。好了,我说哎,比方说这个验证码不一致。好,同学会问是吗?老师你什么时候往session里边放,为什么前面都是放request里边,这个放session里边呢?有这样的几个原因,第一个你这块是一个纯镜像,然后的话呢,你在页面上还想得到这个值的话,放水块子边不行了吧,啊,这个放赛里边其一其二呢,我们通常情况下不建议把这个值放30里边,因为你放30里边的话,这个30生命周期是不是长啊,占资源request一个请求之后它就完了吧。它不占资源,那这个时候为什么我们能够这么这个奢侈的往session里边放呢?因为我整个这个做这个验证码就是用session的,所以说既然用这个三身了是吧,那我多放一个属性不受任何影响,能不用三身就不用三身,一旦要是已经用的话,多放一个属性没什么。
21:18
那特就完了。回看结束,否则呢,我after print吧,我写个hello of,没有this out,我们就不响应了哈,我说,呃,受理请求。请求打印一下保存看效果。IDMEDF。受受理的这两个值都是他,好了,我回来。
22:04
看。这两只数不一样啊,那我就是不回来了,回来的话怎么办?我可以在这个页面上打一个消息,消息这么打。Session get attribute。Message。等于空,等于空的话,它,否则的话是它。Boat。嗯。对,媳妇。就做了一个判断啊,好了再来。
23:00
就不一致啊,那一致的话呢,I z X chhi。小写的,我说我说我说大小写了。还是对接啊,第一个是接EDMTB接。工行了,这样的话呢,就实现了。呃,Java里边的验证码这个呢,必须需要使用session才可以,这个整个的原理跟。跟表单重复提交是一致的,大家只要把表单重复提交搞清楚的话,这个就能明白,唯一的区别是表单重复提交里面那个值是放在隐藏域里面,由。我们写好的这个代码往里边填的,呃,这个呢,是我们自个往里边填的,此外都一样,大家也可以像我们前面那个呃,Request,呃。
24:00
To processor一样是吧,这块的话呢,你也去写一个to processor,那我这块的话呢,把这个代码整个都写了一遍,大家可以更好的来理解。
我来说两句