java生成图片验证码

介绍

验证码的目的是为了防范恶意攻击,如在发送手机短信之前校验验证码,可以防止短信接口被恶意调用导致的金钱损失。验证码有图片验证码,更智能的拖动验证码,点选验证码,今天我们看一下图片验证码的实现。

实现

添加maven依赖

<dependency>
      <groupId>com.github.penggle</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3.2</version>
</dependency>
public class Client {

  public static void main(String[] args) throws IOException {
    Producer producer = createProducer();
    // 生成随机字符串
    String verifyCode = producer.createText();
    // 生成图片
    BufferedImage bufferedImage = producer.createImage(verifyCode);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    ImageIO.write(bufferedImage, "jpg", stream);
    System.out.println(Base64.getEncoder().encodeToString(stream.toByteArray()));
  }

  private static Producer createProducer() {
    Properties properties = new Properties();
    properties.setProperty(Constants.KAPTCHA_BORDER, "no");
    properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "105,179,90");
    properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
    properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "125");
    properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "45");
    properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
    properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35");
    properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "宋体,楷体,微软雅黑");
    properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "5");
    Config config = new Config(properties);
    DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
    defaultKaptcha.setConfig(config);
    return defaultKaptcha;
  }

}

生成的验证码图片如下

kaptcha是google提供的一个很小巧的创建图片验证码的工具包。
我们看一下kaptcha是如何创建随机字符串的

我们没有配置自己的字符串创建者实现,那么就会使用默认的实现DefaultTextCreator。

默认的字符串长度为5,默认的字符串来源为abcde2345678gfynmnpwx。

posted @ 2020-10-25 14:46  strongmore  阅读(684)  评论(0编辑  收藏  举报