验证码-图片随机(伪代码实现)

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"/>