本文实例讲述了Java Web开发之图形验证码的生成与使用方法。分享给大家供大家参考。具体如下:
图形验证码的主要目的是为了增强的安全性,增加用户通过遍历所有可能性来破解密码的难度。
图形验证码的使用包括如下3部分:
① 图形验证码的生成;
② 在页面中的使用;
③ 验证;
1、图形验证码的生成
假设在Servlet生成图形验证码,在JavaBean或者JSP中生成的基本过程是相同的。设计如下过程:
① 设置响应的文档类型;
② 生成随机码;
③ 把随机码保存到session中;
④ 生成图片;
⑤ 把随机码画到内存图片上;
⑥ 把内存图片发送到客户端;
1.1 设置响应的文档类型
在对用户进行响应的时候,需要设置文档类型,要生成图片文档类型可以设置为:image/gif。
在Servlet中的设置方式为:response.setContentType("image/gif");
如果在JSP页面中使用则需要使用:<%@ page contentType="image/gif"%>
1.2 生成随机码
可以根据各种随机数生成策略来生成,并且可以设置随机码有哪些字符组成以及随机码的长度。
本文给出的随机码字符是所有字母和数字。使用的随机码生成策略使用的是Random对象提供的。参考代码如下:
随机码字符列表:
public static final char[] code = {'a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p','q','r','s','t', 'u','v','w','x','y','z', 'A','B','C','D','E','F','G', 'H','I','J','K','L','M','N', 'O','P','Q','R','S','T', 'U','V','W','X','Y','Z', '0','1','2','3','4', '5','6','7','8','9'};
生成随机码的代码:
StringBuffer checkcode=new StringBuffer(); // 每循环一次,生成一位 for(int i=0;i<code_length;i++) { int generated=(new Random()).nextInt(62); checkcode.append(code[generated]); }
1.3 把随机码保存到session中
为了在用户提交验证码之后进行验证,需要保存生成的验证码,可以保存在session中。在Servlet中需要先获取session对象,然后再使用。
下面是参考代码:
// 把生成的验证码保存到session中 HttpSession session=request.getSession(true); session.setAttribute("checkCode",checkcode.toString());
1.4 生成图片
使用BufferedImage类创建对象,然后使用画图对象画图。下面是参考代码:
// 创建内存图片,参数为图片的大小以及类型 BufferedImage image = new BufferedImage(49,14,BufferedImage.TYPE_INT_RGB); // 得到Graphics句柄 Graphics g = image.getGraphics(); // 设置画笔颜色 // g.setColor(Color.yellow); // 画背景 g.fillRect(0,1,49,12); 1.5 把随机码显示在图片上 参考下面的代码: // 设置字体色 g.setColor(Color.black); // 画验证码 g.drawString(checkcode.toString(),4,11); // 图象生效 g.dispose();
1.6 把生成的图片发送到客户端
参考代码如下:
2、在页面中使用图形码:
与使用其它图形的方式相同,使用<img src="…">标签。假设生成图片的Servlet的url-pattern值为checkcode,则在页面中加载图片的代码如下:
获取用户输入的验证码,然后从session中获取保存的验证码,对比来确定是否相同,从而完成验证。
希望本文所述对大家的JSP程序设计有所帮助。
初七上班的头一天,恰逢Windows补丁日。 微软在官方博客中正式官宣了21H1 ,也就...
详解Spring data 定义默认时间与日期的实例 前言: 需求是这样的: 1. 创建时间与...
【单片机】第二章单片机基本原理练习题 一、题目一 1.1 作业题目 1.2 作业解答 ...
canvas一直是前端开发中不可或缺的一种用来绘制图形的标签元素,比如压缩上传的...
2. XSLT的实例 2.1 XSLT如何转换XML 2.2 一个实例 2.3 过程解析 2.4 XSLT的用途 ...
如何在聊天中插入现场直播呢 今天我就教给大家怎样在我们的聊天中插入现场直播。...
外媒 Windows Latest 报道,微软推出的一款新的更新补丁正在向 Windows 10 版本 ...
正则表达式常用来在所有语言中搜索字符串的任何模式或文字。MongoDB还提供了正则...
在采用 log4j 的kafka-appender收集 spark 任务运行日志时,发现提交到 yarn 上...
1.老师,我们中考卷子还没有讲评,能不能约个时间,还是那间教室,那些人。 2....