当前位置:首页 > Java

如何开发java验证码

2026-03-18 23:37:40Java

生成随机验证码

使用Java的Random类或SecureRandom生成随机字符或数字组合。通常验证码包含数字、大小写字母,长度为4-6位。

import java.util.Random;

public class CaptchaGenerator {
    private static final String CHAR_LIST = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    private static final int LENGTH = 6;

    public static String generateCaptcha() {
        Random random = new Random();
        StringBuilder captcha = new StringBuilder();
        for (int i = 0; i < LENGTH; i++) {
            int index = random.nextInt(CHAR_LIST.length());
            captcha.append(CHAR_LIST.charAt(index));
        }
        return captcha.toString();
    }
}

生成图形验证码

使用Java的BufferedImage绘制验证码图片,添加干扰线、噪点等增强安全性。

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class CaptchaImageGenerator {
    public static byte[] generateImage(String captchaText) throws IOException {
        int width = 200, height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = image.createGraphics();

        // 背景色
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, width, height);

        // 验证码文字
        graphics.setColor(Color.BLACK);
        graphics.setFont(new Font("Arial", Font.BOLD, 30));
        graphics.drawString(captchaText, 50, 35);

        // 干扰线
        graphics.setColor(Color.GRAY);
        for (int i = 0; i < 5; i++) {
            int x1 = (int) (Math.random() * width);
            int y1 = (int) (Math.random() * height);
            int x2 = (int) (Math.random() * width);
            int y2 = (int) (Math.random() * height);
            graphics.drawLine(x1, y1, x2, y2);
        }

        ByteArrayOutputStream output = new ByteArrayOutputStream();
        ImageIO.write(image, "png", output);
        return output.toByteArray();
    }
}

验证码存储与校验

将生成的验证码存储在服务端(如Session或Redis),用户提交时进行比对。

import javax.servlet.http.HttpSession;

public class CaptchaValidator {
    public static boolean validate(String userInput, HttpSession session) {
        String storedCaptcha = (String) session.getAttribute("captcha");
        return userInput != null && userInput.equalsIgnoreCase(storedCaptcha);
    }
}

集成到Web应用

在Servlet或Spring Boot中返回验证码图片,并设置Session。

@RestController
public class CaptchaController {
    @GetMapping("/captcha")
    public ResponseEntity<byte[]> getCaptcha(HttpSession session) throws IOException {
        String captchaText = CaptchaGenerator.generateCaptcha();
        session.setAttribute("captcha", captchaText);
        byte[] imageBytes = CaptchaImageGenerator.generateImage(captchaText);
        return ResponseEntity.ok().contentType(MediaType.IMAGE_PNG).body(imageBytes);
    }
}

增强安全性措施

  • 限制验证码有效时间(如5分钟过期)。
  • 禁止同一验证码重复使用。
  • 添加滑动验证或行为验证(如Google reCAPTCHA)补充。

前端调用示例

HTML通过<img>标签加载验证码,表单提交时携带用户输入。

如何开发java验证码

<img src="/captcha" onclick="this.src='/captcha?t=' + Date.now()" />
<input type="text" name="captcha" placeholder="输入验证码" />

标签: 验证码java
分享给朋友:

相关文章

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名.方法名…

如何卸载java

如何卸载java

卸载Java的步骤 Windows系统卸载方法 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到Java相关条目(如“Java 8 Update 251”),右键选择卸载并跟随向导完成操…

如何配置java环境变量

如何配置java环境变量

下载并安装JDK 从Oracle官网或OpenJDK项目下载适合操作系统的JDK安装包。运行安装程序,按照提示完成安装,默认路径通常为C:\Program Files\Java\jdk-版本号。 配…

php实现获取验证码

php实现获取验证码

使用GD库生成验证码 在PHP中,可以通过GD库来生成验证码图片。以下是一个简单的实现示例: <?php session_start(); $width = 120; $height = 40…

win7如何配置java环境变量

win7如何配置java环境变量

下载并安装Java 从Oracle官网下载适合的Java Development Kit (JDK)安装包,选择与系统位数(32位或64位)匹配的版本。运行安装程序,按照提示完成安装,默认路径通常为C…

java实现vue接口

java实现vue接口

Java 实现 Vue 接口的方法 在 Java 中实现 Vue 前端调用的接口,通常需要使用 Spring Boot 框架构建 RESTful API。以下是具体的实现步骤和代码示例。 创建 Sp…