21xrx.com
2024-12-23 10:11:50 Monday
登录
文章检索 我的文章 写文章
如何用Java实现图片验证码功能
2023-06-16 17:12:29 深夜i     --     --

在web开发中,图片验证码(CAPTCHA)是一种用于防止自动化攻击的常用手段。通过生成数字、字母、大小写等不同形式的图片,要求用户在登录或注册时正确输入图片中的字符,从而防止恶意攻击者通过自动化程序批量注册、登录等行为对系统造成损害。本文将介绍如何使用Java实现图片验证码功能。

实现步骤:

1. 首先需要生成一张图片,可以使用Java的BufferedImage类实现。

2. 在图片上随机生成干扰线、点等图案,增加验证码的难度,防止被OCR识别。

3. 生成随机数字符集,如数字、大小写字母等,然后在图片上随机生成指定数量的字符,并将字符记录到session中。

4. 将生成的图片通过Servlet输出到客户端,并在HTML的表单中添加需要验证的输入框和图片显示框。

5. 在表单提交时,服务端通过session中记录的验证码与用户输入的验证码进行比较判断。

下面是一个简单实现的Java方法:


public void generateCaptcha(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

  // 设置图片宽度和高度

  int width = 100;

  int height = 30;

  // 创建BufferedImage对象

  BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

  // 获取Graphics2D对象

  Graphics2D g2d = img.createGraphics();

  // 填充背景色

  g2d.setColor(Color.WHITE);

  g2d.fillRect(0, 0, width, height);

  // 设置字体和文字大小

  g2d.setFont(new Font("Arial", Font.BOLD, 20));

  // 生成随机字符串

  String captcha = "";

  Random r = new Random();

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

    captcha += (char) (r.nextInt(26) + 'A');

  }

  // 将验证码保存到session中

  HttpSession session = request.getSession();

  session.setAttribute("captcha", captcha);

  // 将验证码绘制到图片中

  for (int i = 0; i < captcha.length(); i++) {

    g2d.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));

    g2d.drawString(String.valueOf(captcha.charAt(i)), 20 * i + 10, 25);

  }

  // 随机生成干扰线和点

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

    g2d.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));

    g2d.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));

    g2d.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));

    g2d.drawOval(r.nextInt(width), r.nextInt(height), 2, 2);

  }

  // 将图片输出到客户端

  response.setContentType("image/png");

  OutputStream os = response.getOutputStream();

  ImageIO.write(img, "PNG", os);

  os.flush();

  os.close();

}

代码解释:

1.设置图片宽度和高度

2.创建BufferedImage对象

3.获取Graphics2D对象

4.填充背景色

5.设置字体和文字大小

6.生成随机字符串,并将其保存到session中

7.将验证码绘制到图片中

8.随机生成干扰线和点

9.将图片输出到客户端

关键词:

1. Java

2. 验证码

3. BufferedImage

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复