基于Struts框架的验证码的实现
2013-11-13蒋守花贺春林
蒋守花 贺春林
(西华师范大学 计算机学院,四川 南充 637009)
0 引言
随着计算机技术、网络技术的发展,网络安全逐渐得到了人们的重视,对于网站的营运者来说网络安全显得尤为重要。因为一旦受到外来的恶意攻击,网站就显得不那么安全、稳定了。为了防止恶意访问,验证码应运而生,它的诞生是为了防止客户机恶意攻击造成的系统资源浪费,网站性能降低甚至程序崩溃。
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。所以现在很多网站都采用了验证码技术。
1 Struts工作流程
Struts的工作流程简介如图1所示:
图1 Struts工作流程
1.1 浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等。
1.2 Control中的核心控制器FilterDispatcher根据请求调用相应的业务逻辑控制器(Action)。
1.3 Struts的拦截器链自动对请求应用通用功能,如数据校验和文件上传等功能。
1.4 回调Action中的execute()方法,并在方法体内调用业务逻辑组件来处理请求(Model)。既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。
1.5 execute()方法将调用业务逻辑组件(Model)得到的数据返还并更新视图层(View),可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支持Velocity、FreeMarker等模板技术。
2 实现原理及实现过程
2.1 实现原理
当用户加载登录页面的时候,发送一个请求给servlet,使其产生一个随机的验证码图片,servlet中产生4个数字随机组合的验证码,存放到request的session中,并在登录页面上以图片的形式显示在页面中。当用户填完登录信息后,再跳转到验证码一行,系统就自动弹出验证码图片,用户填入图片中的数字方可登录,如果还有其他的信息请用户自行填入。如果在登录界面看到的验证码不清晰,请用户单击“换一张”刷新验证码,可重复刷新,直到看到清晰的图片为止,刷新验证码图片是通过页面javascript脚本控制的,其实质就是重新发送一次请求给servlet,系统产生新的随机验证码并更换session中的旧验证码。
2.2 实现过程
Login.jsp是登陆界面,验证码的图片要显示在这上面,在Chkcode.jsp是验证码生成的代码,里面有汉语注释,自己看。随机数字保存在yzkeyword里面。
在本实现过程中,JSP页面采用了Struts框架。
2.2.1 首先需要设计一个登录页面Login.jsp,主要源程序如下(非关键代码已省略):
整个实现比较简单,如图2所示:
图2 登录界面
2.2.2 Chkcode.jsp是验证码生成的代码,随机数字保存在yzkeyword里面。主要代码如下(非关键代码已省略):
2.2.3 在登陆界面,输入验证码点击登录,首先在web.xml里面遇到拦截器imageflater,在imageflater里面验证是否正确。
验证方式就是把存在yzkeyword里面的数据和你输入的验证码进行对比。正确就转下一个拦截器,不对,就返回错误到lgoin.jsp。
(1)拦截器imageflater.java的主要代码如下(非关键代码已省略):
(2)需要编写的配置文件有两个:web.xml和Struts-config.xml。在web.xml文件中配置当前web应用的相关配置;然后在Struts-config.xml文件中配置与当前web应用相关的struts配置。
3 结束语
本文主要介绍了基于Struts框架的验证码实现,实现过程中登录界面的设计,验证码图片还有拦截器都做得不够完美,还有待进一步研究。验证码的种类繁多,有字母验证码,数字与字母随机结合的验证码,但是本文只介绍了数字验证码这一种形式。证码技术随着网络技术的发展也会变得更加重要,所以本人还要更加努力的投身于这项技术的研究中。
[1]刘宝林.Java程序设计与案例[M].北京:高等教育出版社,2004.
[2]姜国海,赵小薇.Java应用案例分析[M].北京:清华大学出版社,2012.
[3]邹竹彪.Jsp网络编程从入门到精通[M].北京:清华大学出版社,2007.
[4]邱哲,王俊标,马斗.Struts Web设计与开发大全[M].北京:清华大学出版社,2006.
[5]高红岩.Struts实用开发指南:基于MVC+MyEclipse的Java Web应用开发[M].北京:科学出版社.
[6]罗玉玲.J2EE应用开发详解[M].北京:电子工业出版社.