图形验证码是各大系统中登录注册模块必备的功能之一,主要用于防止暴力破解。图形验证码的基本原理很简单,可分为以下5步:
(1)建立图形缓冲区
(2)在图形缓冲区上用随机颜色填充背景
(3)在图形缓冲区上输出验证码。
(4)将验证码保存在HttpSession对象中。
(5)向客户输出图形验证码。
废话少说,直接上代码:本例中,通过ValidationCode类实现图形验证码功能,这是一个Servlet类,在客户端只需要向访问普通Servlet一样访问ValidationCode类即可。该类的代码如下:
package servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ValidationCode extends HttpServlet{
//图形验证码的字符集
private static String codeChars = "%#23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//返回一个随机三色(color对象)
private static Color getRandomColor(int minColor,int maxColor){
Random random = new Random();
if(minColor>255){
minColor=255;
}
if(maxColor>255){
maxColor=255;
}
//获取红色的随机颜色
int red = minColor +random.nextInt(maxColor-minColor);
int green = minColor +random.nextInt(maxColor-minColor);
int blue = minColor +random.nextInt(maxColor-minColor);
return new Color(red,green,blue);
}
@Override