加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

java ee如何用VeriyCodeUtils类获取验证码图片?

发布时间:2024-01-06 14:22:05 所属栏目:资讯 来源:互联网
导读:  这篇文章主要讲解了“java ee如何用VeriyCodeUtils类获取验证码图片?”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟

  这篇文章主要讲解了“java ee如何用VeriyCodeUtils类获取验证码图片?”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

  昨晚在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页面使用验证码

  

  

  

 

  

${requestScope.code}

 

  " /> #这里使用直接让img访问servlet,通过response响应一个图像流

  换一张

  

" method="post">

 

  

  

  

 

  

  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("下面开始 做其他业务操作....");

  }

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章