Web app 验证码实现

1. 在jsp页面添加验证码           
 <tr>
                                <td height="28"><table width="100%" border="0R" cellspacing="0" cellpadding="1">
                                  <tr>
                                    <td width="20">&nbsp;</td>
                                    <td width="100">&nbsp;<span class="STYLE2"><strong>验证码</strong></span></td>
                                    <td width="150"><span class="STYLE2">
                                      <INPUT type="text" name="param_Validate" size="6"
          value=""  maxlength="10">
          <img src="jsp/image.jsp" align='absmiddle' />
                                    </span></td>
                                    <td><span class="STYLE2">(请将图片中的数字填入框中)</span></td>
                                  </tr>
                                </table></td>
                              </tr>                            

 

2. 加载jsp/image.jsp, 使用JavaBean

<%@ page contentType="image/jpeg;charset=UTF-8" import="javax.imageio.*"%>
<jsp:useBean id="image" scope="session" class="cn.com.xxx.fe.servlet.user.ValidationImage"/>
<%
//设置页面不缓存
//response.setHeader("Pragma","No-cache");
//response.setHeader("Cache-Control","no-cache");
//response.setDateHeader("Expires", 0);

// 输出图象到页面
ImageIO.write(image.creatImage(), "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();

// 将认证码存入SESSION
session.setAttribute("VERIFY_YCODE",image.sRand);
%>

3. ValidationImage 功能Bean实现

import java.awt.*;
import java.awt.image.*;
import java.io.Serializable;
import java.util.*;
//v100+ start
public class ValidationImage implements Serializable{

 public String sRand = "";

 public Color getRandColor(int fc, int bc) {
  Random random = new Random();
  if (fc > 255)
   fc = 255;
  if (bc > 255)
   bc = 255;
  int r = fc + random.nextInt(bc - fc);
  int g = fc + random.nextInt(bc - fc);
  int b = fc + random.nextInt(bc - fc);
  return new Color(r, g, b);
 }

 public BufferedImage creatImage() {

  int width = 60, height = 20;
  BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);

  Graphics g = image.getGraphics();

  Random random = new Random();

  g.setColor(getRandColor(200, 250));
  g.fillRect(0, 0, width, height);

  g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

  g.setColor(getRandColor(160, 200));
  for (int i = 0; i < 155; i++) {
   int x = random.nextInt(width);
   int y = random.nextInt(height);
   int xl = random.nextInt(12);
   int yl = random.nextInt(12);
   g.drawLine(x, y, x + xl, y + yl);
  }

  sRand = "";

  for (int i = 0; i < 4; i++) {
   String rand = String.valueOf(random.nextInt(10));
   sRand += rand;
   g.setColor(new Color(20 + random.nextInt(110), 20 + random
     .nextInt(110), 20 + random.nextInt(110)));
   g.drawString(rand, 13 * i + 6, 16);
  }
  g.dispose();
  return image;
 }
}
//v100+ end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值