在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码
2015-10-26 15:06
1096 查看
只需几步就可以生成动态随机的验证码,最终效果如下图:
一 前台显示页面login.jsp其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下:
二 修改web.xml新增一个节点,代码如下:
三 后台的servlet文件HandleDrawValidateCode.java这个文件主要负责处理前台请求,并返回生成的验证码图片,同时将图片上的随机字符存入session中,以供登录时进行验证,HandleDrawValidateCode.java完整代码如下:
注:在这里,干扰线的颜色和数目都可以自己设定,颜色可以使用随机色,同时显示的每个文字也可以使用随机的颜色,可以增加验证码识别难度,当然在这里我把比较容易混淆的0和O以及I都给去掉了。如果选用经过编码的中文字符的话,也是可以生成中文验证码的四 login.jsp页面提交表单后,后台的servlet文件HandleLogin.java校验验证码,并进行登录验证经过上面的三个步骤后,login.jsp应该是可以正确显示验证码了,同时点击验证码图片后会生成一个新的验证码,login.jsp提交表单后HandleLogin.java文件验证验证码时主要是:将输入的验证码中的小写字母转换成大写,再和验证码生成时保存在session中的字符串比较,如果相同,则表示输入正确,同时移除session中设置的值,防止重复提交,爆破密码,HandleLogin.java相关代码如下:
注1:上面用到的StringUtil是我写的一个字符串相关的方法类,其中用到的方法convertToCapitalString()目的是将一个字符串中的小写字母转换为大写字母,代码如下:
注2:其中方法xssEncode()是将输入的字符串进行编码,以此避免产生XSS跨站脚本攻击,用的是commons-lang-2.4.jar里的StringEscapeUtils,代码如下(PS:当然在这里没有什么必要,可以省略):
本转自:程序员鼓励师
一 前台显示页面login.jsp其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下:
相关文章推荐
- JS调试加断点
- WebGL With Three.js – Lesson 6(转)
- js的运用
- jsf2.0视频
- NSData,NSImage,NSDictionary,NSString,NSURL 等等互相转换
- log4js日志文件库的使用
- JS当中获取Web访问基路径
- extjs官方实例收集
- JavaScript中的数据类型转换方法小结
- JavaScript入门(下篇)
- 获取json 对象属性和值
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
- 学习javascript设计模式之中介者模式
- js页面刷新一次
- javascript 学习总结(一)
- javascript中将数字提出放入到数组中
- 如何实现JavaScript动态加载CSS和JS文件
- JavaScript入门(上篇)
- JS跨域方法及原理
- JSP页面中路径设置