20111026学习总结:

利用Session实现一次性验证码代码:

服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器程序才开始正常的表单处理流程。

产生验证码图片代码:

package cn.csdn.web.util;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

import javax.imageio.ImageIO;

public class ImageUtil {

private static final int WIDTH = 130;

private static final int HEIGHT = 25;

private static final int IMAGETYPE = BufferedImage.TYPE_INT_RGB;

//随机产生的汉字

public static String checkCode;

private static void setFont(Graphics g) {

//写汉字  

String base = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d";       

Color c = Color.BLUE;

g.setColor(c);

Font font = new Font("宋体", Font.ITALIC, 20);

        g.setFont(font);

        

        StringBuffer sb = new StringBuffer();

        //产生汉字

        for(int i=0;i<4;i++){

         int location = new Random().nextInt(base.length()-1);

     char chr = base.charAt(location);

     sb.append(chr+"");

        }

        checkCode = sb.toString();

        Graphics2D gd = (Graphics2D) g;

        gd.rotate(0.05);//括号内的数字自定

        //把汉字写到图片上

        g.drawString(sb.toString(), 10, 20);

}

private static void setRandomLine(Graphics g) {

Color c = Color.GREEN;

g.setColor(c);

for (int i = 0; i <= 4; i++) {

int x1 = new Random().nextInt(WIDTH);

int y1 = new Random().nextInt(HEIGHT);

int x2 = new Random().nextInt(WIDTH);

int y2 = new Random().nextInt(HEIGHT);

g.drawLine(x1, y1, x2, y2);

}

}

private static  void setBorder(Graphics g) {

Color c = Color.BLACK;

g.setColor(c);

g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);

}

private static void setBackground(Graphics g) {

Color c = Color.WHITE;

g.setColor(c);

g.fillRect(0, 0, WIDTH, HEIGHT);

}

public static  void outImage(OutputStream os) throws IOException{

// 2、创建图片

BufferedImage image = new BufferedImage(WIDTH, HEIGHT, IMAGETYPE);

// 3、得到图型

Graphics g = image.getGraphics();

// 4、设置图片背景色

setBackground(g);

// 5、向图片上写边框

setBorder(g);

// 6、向图片上写干扰线

setRandomLine(g);

// 7、向图片上写数据

setFont(g);

// 8、把图片写给浏览器

ImageIO.write(image, "jpeg", os);

}

}

使验证码图片在浏览器上打的代码:

              //清除浏览器的缓存

response.setIntHeader("expires", 0);

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

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

 // 1、通知浏览器以图片方式打开

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

//写出图片

ImageUtil.outImage(response.getOutputStream());

HttpSession session = request.getSession();

//得到汉字

String ckcode = ImageUtil.checkCode;

//存入session中

  session.setAttribute("ckcode", ckcode);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值