验证码可以区分进行操作的是否为人为操作,一般常见用于登录、注册等,使用验证码可以防止有人恶意注册等操作。Java编写生成一个验证码图片的工具类,主要是用到Java绘图工具类。
封装一个生成随机验证码的静态方法,在servlet调用封装的方法。
private void checkCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 服务器通知浏览器不要缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache"); response.setHeader("expires", "0");
response.setDateHeader("expires", -1);// 发送响应头,控制浏览器不要缓存
int width = 120;
int height = 42;
// 生成对应宽高的初始图片
// 在内存中创建一个宽120,高42的图片,默认黑色背景
BufferedImage verifyImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 调用封装生成随机验证码,取得验证码字符
String randomText = VerifyCode.drawRandomText(width, height, verifyImg);
//把验证码字符存在到session中,便于登录/注册等时检验用户输入的验证码是否正确
request.getSession().setAttribute("verifyCode", randomText); response.setContentType("image/jpeg");// 必须设置响应内容类型为图片(通知浏览器以图片形式打开),否则前台不识别
// 将内存中的图片输出到浏览器 参数一:图片对象 参数二:图片的格式,如PNG,JPG,GIF 参数三:图片输出到哪里去
OutputStream os = response.getOutputStream(); // 获取文件输出流
ImageIO.write(verifyImg, "png", os);// 输出图片流
os.flush();
os.close();// 关闭流
}
封装生成验证码字符,返回值为验证码字符。返回验证码图片关键是绘制图片,在Java中可以使用BufferedImage、Graphics、Graphics2D、Color等对象进行绘图。
public static String drawRandomText(int width, int height, BufferedImage verifyImg) {