用jsp实现异步验证码校验功能
众所周知,网站上的验证码的作用是保护网站安全,一般网站都要通过验证码来防止机器大规模注册,机器暴力破解数据密码等危害。
1. 示例
2. img.jsp生成验证码图像的jsp文件
a. 生成颜色随机值和四位数的验证码值
//随机产生颜色值
public Color getColor(){
Random random = new Random();
int rgb1 = random.nextInt(256); //[0-256)
int rgb2 = random.nextInt(256);
int rgb3 = random.nextInt(256);
return new Color(rgb1,rgb2,rgb3);//RGB值 0-255
}
//产生四位数验证码值
public String getNum(){
int random = (int)(Math.random() * 9000 + 1000);
return String.valueOf(random);
}
b. 设置验证码头信息
//禁止缓存,防止验证码过期
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-control","no-cache");
response.setHeader("Expires","0");//过期时间
c. 获取画笔开始绘制
//绘制验证码
BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);//宽、高、类型
//画笔
Graphics graphics = image.getGraphics();
graphics.fillRect(0,0,80,30);//0,0填充到80,30
//绘制验证码干扰线条,随机
for (int i = 0; i < 60; i++) {
Random random = new Random();
int xBegin = random.nextInt(80);
int yBegin = random.nextInt(30);//线条起始位置
int xEnd = random.nextInt(xBegin + 10);
int yEnd = random.nextInt(yBegin + 10);//线条终止位置
graphics.setColor(getColor());//画笔颜色随机
//绘制线条
graphics.drawLine(xBegin,yBegin,xEnd,yEnd);
}
//即将绘制验证码
graphics.setFont(new Font("seif",Font.BOLD,20));//设置字体参数
graphics.setColor(Color.BLACK);//设置验证码颜色
String checkCode = getNum();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < checkCode.length(); i