Java实现图形验证码功能

 时间:2024-10-12 21:44:04

我们在网页登录的时候,经常会看到需要输入图形验证码的功能,今天我们自己来实现以下这个功能。这个功能需要两步来完成,首先我们需要开发一个图形验证码的接口,它的作用是在登录页面的表单上显示出图形验证码,然后我们还需要在认证流程中加入图形验证码的校验,下面就跟着小编一起来实现吧。

工具/原料

IntelliJ IDEA

生成图形验证码

1、首先根据随机数生成图片,我们先生成验证码,创建ValidateCode类,包含code和expireTime,即验证码的数字和失效时间。创建ImageCode类继承ValidateCode。

Java实现图形验证码功能
Java实现图形验证码功能

2、接下来我们创建一个生成验证码的方法。@Get怡觎现喾Mapping("/code/image")public void createCode(HttpServletRequest request, HttpServletResponse response) { ImageCode imageCode = createImageCode(request);}

Java实现图形验证码功能

3、接下来我来写createImageCode方法。/** * 生成验证码 * @param request * @return */private ImageCode createImageCode(HttpServletRequest request) { int width = 67; int height = 23; 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.ITALIC, 20)); 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); } String 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(); // 60秒的失效时间 return new ImageCode(image, sRand, 60);}/** * 生成随机背景条纹 * * @param fc * @param bc * @return */private 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);}

Java实现图形验证码功能

4、将随机数存到session中。private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy();sessionStrategy.setAttribute(new ServletWebRequest(request), SESSION_KEY, imageCode);

Java实现图形验证码功能

5、再将生成的图片写到接口的响应中。ImageIO.write(imageCode.getImage(), "JPEG", response.getOutputStream());这个方法会抛出IO异常,我们继续将异常抛出即可。

Java实现图形验证码功能

6、最后我们再来介绍一下验证码校验的功能,这个功能通过过滤器Filter来实现。我们创建ValidateCodeFilter过滤器,在doFilterInternal方法中处理验证码的校验。

Java实现图形验证码功能
  • padding影响宽度怎么办
  • 如何卸载python的scipy模块
  • 操作系统创建本地组的步骤
  • 详解MongoDB如何更新文档 ( 增加和删除属性 )
  • 魔兽争霸RPG守护龟龟循环圈攻略
  • 热门搜索
    关于英语的手抄报 童心向党手抄报图 关于读书的手抄报图片 民法典手抄报 校园手抄报模板 语文手抄报内容 预防疾病手抄报 关于清明节手抄报 欢庆六一手抄报内容 关于元宵节的手抄报