将验证码代码应用于struts2框架

验证码功能经常应用到网站中,放到此处便于查阅。
核心代码如下,如需全部代码请查看附件。

1、java生成验证码代码如下:(此代码也可放到servlet中)
public class ImageUtil {
private static String[] chars = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
private static final int WIDTH = 200;
private static final int HEIGHT = 100;
private static final int NUM = 4;
private static final int LINE = 10;

/**
* 生成随机图
*
* @return string 随机字符 image随机图片
*/
public static Map getImage() {
Map map = new HashMap();
String s = "";
// 创建�?个BufferedImage
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics();
Random ran = new Random();
// 画背景色
graphics.setColor(new Color(ran.nextInt(100), ran.nextInt(100), ran
.nextInt(100)));
graphics.fillRect(0, 0, WIDTH, HEIGHT);
// 画随机字�?
for (int i = 0; i < NUM; i++) {
graphics.setColor(new Color(ran.nextInt(20)+200, ran.nextInt(20)+200, ran
.nextInt(200)+20));
graphics.setFont(new Font(null, Font.BOLD, ran.nextInt(10) + 80));
String ranstr = chars[ran.nextInt(chars.length)];
graphics.drawString(ranstr, WIDTH / NUM * (i), HEIGHT / 4 * 3);
s += ranstr;
}
// 画干扰线
for (int j = 0; j < LINE; j++) {
graphics.setColor(new Color(ran.nextInt(255), ran.nextInt(255), ran
.nextInt(255)));
graphics.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT), ran
.nextInt(WIDTH), ran.nextInt(HEIGHT));
}
map.put("code", s);
map.put("image", image);
return map;
}

/**
* 将随机图片转换成inputStream
*/
public static InputStream getInputStream(BufferedImage image)
throws IOException {
// 将BufferedImage转换成符合JPEG格式字节数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JPEGImageEncoder encode = JPEGCodec.createJPEGEncoder(bos);
encode.encode(image);
// 将图片的字节数组信息,封装成InputStream
byte[] byteArr = bos.toByteArray();
return new ByteArrayInputStream(byteArr);
}

}



2、action引用验证码
public class ImageCodeAction {

private InputStream imageStream;

public String execute() {

Map map = ImageUtil.getImage();
//存放在session中便于用户输入后进行验证 此处略去
//getSession().put(Constants.SESSION_CODE, map.get("code"));
try {
imageStream = ImageUtil.getInputStream((BufferedImage) map
.get("image"));
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}

public InputStream getImageStream() {
return imageStream;
}

public void setImageStream(InputStream imageStream) {
this.imageStream = imageStream;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值