首页 > 编程 > JSP > 正文

Jsp servlet验证码工具类分享

2020-07-26 23:15:54
字体:
来源:转载
供稿:网友

昨晚在csdn看到一位前辈写一个ajax+servlet+jsp验证,顿时心血来潮,在阅读前辈的代码下我亲手体验一下,做了一个验证码生成工具类,以供大家做个参考。

1、添加VeriyCodeUtils类生成验证码图像

package com.servlet;  import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.OutputStream; import java.util.Random;  import javax.imageio.ImageIO;  /**  *  * @author hubiao  *  验证码生成器  * 用到API  *  BufferedImage 创建一个图像  *  Graphics2D 绘制  *   fillRect(x,y,width,height);背景  *   font()字体  *   drawRect();边框  *   drawLine();线  *   drwaString:图像数据  *  ImageIO 生成图像  */ public class VeriyCodeUtils {  /**   * @param output 保存验证图像的流   * @return 验证码   */  public static String newVeriyCode(OutputStream output)  {   int width = 90;   int height = 40;   int codeCount = 5;   char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',      'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',      'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };      //创建图像对象,8位RGB   BufferedImage buffered = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);      //通过Crapahices来绘制图像到BufferedImage中   Graphics2D gra = buffered.createGraphics();      //设置图片背景:白色   gra.setColor(Color.WHITE);   gra.fillRect(0, 0, width, height);      //设置字体,字体大小根据图片高度决定   gra.setFont(new Font("Fixedsys",Font.PLAIN,height-2));      //设置边框:黑色,1cm   gra.setColor(Color.BLACK);   gra.drawRect(0, 0, width-1, height-1);      //生成10条黑色干扰线   gra.setColor(Color.BLACK);   Random ran = new Random();   for(int i = 0; i < 70;i++)   {    int x = ran.nextInt(255);    int y = ran.nextInt(255);    int x1 = ran.nextInt(255);    int y1 = ran.nextInt(255);    gra.drawLine(x, y,x+x1, y+y1);//画直线   }   //生成验证码   StringBuffer sb = new StringBuffer();   int r = 0,g = 0,b = 0;   for(int i = 0; i < codeCount; i++)   {    String strRand = String.valueOf(codeSequence[ran.nextInt(codeSequence.length)]);    //对每位验证码都生成不同的颜色,增加识别系统难度    r = ran.nextInt(255);    g = ran.nextInt(255);    b = ran.nextInt(255);    gra.setColor(new Color(r, g, b));    gra.drawString(strRand, (i+1)*13, height-4);    sb.append(strRand);   }   try {    ImageIO.write(buffered, "jpeg", output);   } catch (Exception e) {    throw new RuntimeException(e);   }      return sb.toString();  } } 

2、servlet使用验证码

protected void doPost(HttpServletRequest req, HttpServletResponse resp)    throws ServletException, IOException {   //禁止图像缓存   resp.setHeader("Pragma", "no-cache");    resp.setHeader("Cache-Control", "no-cache");    resp.setDateHeader("Expires", 0);    resp.setContentType("image/jpeg");      //生成验证码图像   String veriyCode = VeriyCodeUtils.newVeriyCode(resp.getOutputStream());      //将验证码保存到session中   HttpSession session = req.getSession();   session.setAttribute("validateCode", veriyCode);  } 

3、JSP页面使用验证码

</head>  <script type="text/javascript">   function createCode()   {    var t = new Date().getTime();//防止页面缓存,使用时间搓    var srcImg = document.getElementById("srcImg");    srcImg.src="/ImgVeifyWeb/vity.do?"+t;   }  </script>  <body>  <h1>${requestScope.code}</h1>  <img id="srcImg" src="<c:url value="/vity.do"></c:url>" /> #这里使用直接让img访问servlet,通过response响应一个图像流  <a href="##" rel="external nofollow" id="codeId" onclick="createCode()">换一张</a>  <form action="<c:url value="/hello.do"></c:url>" method="post">   <input type="text" name="codeVify"/>   <input type="submit" value="提交"/>  </form>  </body> 

4、校验验证码

protected void doPost(HttpServletRequest req, HttpServletResponse resp)    throws ServletException, IOException {   HttpSession session = req.getSession();   Object validateCode = session.getAttribute("validateCode");   System.out.println(validateCode);      String codeVify = req.getParameter("codeVify");   if(codeVify==null || codeVify.equals(""))   {    req.setAttribute("code","验证证不能为空");    req.getRequestDispatcher("/index.jsp").forward(req, resp);    return;   }else if(!validateCode.toString().equalsIgnoreCase(codeVify))   {    req.setAttribute("code","验证证错误");    req.getRequestDispatcher("/index.jsp").forward(req, resp);    return;   }   System.out.println("下面开始 做其他业务操作....");  } 

校验图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表