好记性不如烂笔头12-使用HttpServletResponse生成验证码

验证码可以在JS中生成,也可以利用HttpServletResponse在JAVA端生成。图片验证码是对付机器模拟人登陆的有效工具;短信验证码是常用的移动互联网验证办法。

短信验证码的实现比图片验证码还要简单,主要是通过短信通道完成短信的发送和验证;

图片验证码根据不同的验证码复杂度,可以使用一些特殊的技能,比如成语,比如数字计算等,本文的示例是一个简单的图片验证码,输出图片(数字或者数字加汉字)。

图片用JDK自带BufferedImage实现。

1、使用HttpServletResponse生成图片验证码的源代码

package com.servlet;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/**

 *通过HttpServletResponse生成简单验证码(数字或者数字+汉字)

 *@author 范芳铭

 */

public class ResponseVerification  extends HttpServlet{

   public void doGet(HttpServletRequest request, HttpServletResponseresponse)

            throws ServletException,IOException {

       

       response.setHeader("refresh", "6");//设置响应头控制浏览器每隔6秒钟刷新一次

       //1.在内存中创建一张图片

       BufferedImage image = new BufferedImage(100, 30,BufferedImage.TYPE_INT_RGB);

       //2.得到图片

       Graphics2D g =(Graphics2D)image.getGraphics();

       g.setColor(Color.WHITE);//设置图片的背景色

       g.fillRect(0, 0, 100, 30);//填充背景色

       //3.向图片上写数据

       g.setColor(Color.BLUE);//设置图片上字体的颜色

       g.setFont(new Font(null, Font.BOLD, 20));

       g.drawString(this.getRandomString(), 0, 20);

       //4.设置响应头控制浏览器浏览器以图片的方式打开

       //等同于response.setHeader("Content-Type","image/jpeg");

       response.setContentType("image/jpeg");

       //5.设置响应头控制浏览器不缓存图片数据

       response.setDateHeader("expries", -1);

       response.setHeader("Cache-Control", "no-cache");

       response.setHeader("Pragma", "no-cache");

       //6.将图片写给浏览器

       ImageIO.write(image, "jpg", response.getOutputStream());

   }

 

   //生成字符和汉字混排内容

   private String getRandomString(){

       Random random = new Random();

       String value = String.valueOf(random.nextInt(9999999));

 

       StringBuffer sb = new StringBuffer();

       for (int i = 0; i < 8-value.length(); i++) {

           sb.append("饭");

       }

       value = sb.toString()+value;

       return value;

   }

   

   public void doPost(HttpServletRequest request, HttpServletResponseresponse)

            throws ServletException,IOException {

       doGet(request, response);

   }

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。