验证码-图片随机(伪代码实现)
1.3. 验证码
1.3.1. 验证码的作用
验证码技术可以防止对于应用恶意发送数据,因其不规律且不能由机器代劳,所以一定程度上避免了恶意程序对网站的攻击。
验证码本质上是一张图片,图片内容的准确解析不容易用程序来实现,所以能避免内容被快速读取。并且,图片的内容是使用程序随机生成后绘制得到。
注册、登录这样的功能一般都会配备验证码,一定程度上避免恶意代码的攻击。
1.3.2. 验证码的绘制
绘制验证码图片不仅仅需要随机生成要绘制的内容,同时要配合Java中与绘图有关的一套API来完成。绘制API将画板、画笔、颜料、字体等都解释为对象,绘制的过程就是这些对象互相配合完成的。主要涉及Graphics、Font等类型。
1.3.3. 验证码图片的绘制步骤
绘制图片的基本步骤如下:
1.常见内存画板对象
2.创建基于该画板的画笔
3.设定画笔的颜色
4.设定画板背景的颜色
5.使用画笔的绘制方法绘制随机内容
6.更改画笔颜色
7.绘制随机的两点一线的干扰线
8.绘制完成后将图片压缩并输出到客户端
以上步骤对应的实现代码如下所示:
代码
11.public class CheckcodeServlet extends HttpServlet {
12. private int width = 80; //图片的宽度
13. private int height = 30;//图片的高度
14. public void service(HttpServletRequest request,
15.HttpServletResponse response)throws ServletException, IOException {
18. * 绘图
20. //step1,创建一个内存映像对象(画板)
21. BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
23. //step2,获得画笔
24. Graphics g = image.getGraphics();
25. //step3,给笔上色
26. Random r = new Random();
27. g.setColor(new Color(r.nextInt(255), r.nextInt(255),r.nextInt(255)));
28. //step4,给画板设置背景颜色
29. g.fillRect(0, 0, width, height);
30. //step5,绘制一个随机的字符串
31. String number = r.nextInt(99999) + "";
32. g.setColor(new Color(0,0,0));
33. //new Font(字体,风格,大小)
34. g.setFont(new Font(null,Font.ITALIC,24));
35. g.drawString(number, 5, 25);
36. //step6,加一些干扰线
37. for(int i=0;i < 8;i++){
38. g.setColor(new Color(r.nextInt(255),
39. r.nextInt(255),r.nextInt(255)));
40. g.drawLine(r.nextInt(width),
41. r.nextInt(height), r.nextInt(width),
42. r.nextInt(height));
43. }
44. /*
45. * 压缩图片并输出到客户端(浏览器)
46. */
47. response.setContentType("image/jpeg");
48. OutputStream ops =response.getOutputStream();
49. javax.imageio.ImageIO.write(image, "jpeg", ops);
50. ops.close();
51. }
52.}
配置web.xml文件代码如下:
07.<servlet>
08.<servlet-name>CheckcodeServlet</servlet-name>
09.<servlet-class>web.CheckcodeServlet</servlet-class>
10.</servlet>
12.<servlet-mapping>
13.<servlet-name>CheckcodeServlet</servlet-name>
14.<url-pattern>/checkcode</url-pattern>
15.</servlet-mapping>
HTML页面中添加如下代码加入该图片:
01.<img src="checkcode"/>