目录

  • 说明
  • pom引入
  • 详解参数类使用
    • easy-captcha 中提供了下面几种类
    • 源码说明
  • Captcha使用
  • 验证图解
  • 源码测试GitHub

说明

Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目

pom引入

 <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version></dependency>

详解参数类使用

easy-captcha 中提供了下面几种类

类名 说明 图片
ArithmeticCaptcha 数字加减乘除验证
ChineseCaptcha 中文验证
ChineseGifCaptcha 中文动态验证
GifCaptcha 动态字符验证
SpecCaptcha 字符验证
CaptchaUtil 输出类

源码说明

在上面的类中,都是继承自Captcha类,类中提供了两个主要抽象方法,自定义验证码生成器也需继承Captcha,实现下面两个方法。

   public abstract boolean out(OutputStream var1);public abstract String toBase64();

来看SpecCaptcha 默认生成验证码的工具类,其他几种验证码生成类,一样的逻辑。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package com.wf.captcha;import com.wf.captcha.base.Captcha;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;public class SpecCaptcha extends Captcha {//空构造方法public SpecCaptcha() {}//设置验证码的长宽public SpecCaptcha(int width, int height) {this();this.setWidth(width);this.setHeight(height);}
//设置验证码的长宽,和生成验证码的长度public SpecCaptcha(int width, int height, int len) {this(width, height);this.setLen(len);}
//设置验证码的长宽,和生成验证码的长度,以及字体public SpecCaptcha(int width, int height, int len, Font font) {this(width, height, len);this.setFont(font);}// 验证码返回public boolean out(OutputStream out) {return this.graphicsImage(this.textChar(), out);}
//验证码转为base64public String toBase64() {return this.toBase64("data:image/png;base64,");}//生成验证码逻辑private boolean graphicsImage(char[] strs, OutputStream out) {try {BufferedImage bi = new BufferedImage(this.width, this.height, 1);Graphics2D g2d = (Graphics2D)bi.getGraphics();g2d.setColor(Color.WHITE);g2d.fillRect(0, 0, this.width, this.height);g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);this.drawOval(2, g2d);g2d.setStroke(new BasicStroke(2.0F, 0, 2));this.drawBesselLine(1, g2d);g2d.setFont(this.getFont());FontMetrics fontMetrics = g2d.getFontMetrics();int fW = this.width / strs.length;int fSp = (fW - (int)fontMetrics.getStringBounds("W", g2d).getWidth()) / 2;for(int i = 0; i < strs.length; ++i) {g2d.setColor(this.color());int fY = this.height - (this.height - (int)fontMetrics.getStringBounds(String.valueOf(strs[i]), g2d).getHeight() >> 1);g2d.drawString(String.valueOf(strs[i]), i * fW + fSp + 3, fY - 3);}g2d.dispose();ImageIO.write(bi, "png", out);out.flush();boolean var20 = true;return var20;} catch (IOException var18) {var18.printStackTrace();} finally {try {out.close();} catch (IOException var17) {var17.printStackTrace();}}return false;}
}

Captcha使用

以上几种提供的工具类,都有使用测试

package com.test.execption.controller;import com.ramostear.captcha.HappyCaptcha;
import com.wf.captcha.*;
import com.wf.captcha.utils.CaptchaUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 类描述:EasyCaptcha 验证码工具** @author admin* @date 2023-01-02 17:47**/@RestController
@RequestMapping(value = "captcha")
public class EasyCaptchaController {/*** 生成字符串验证码** @param request* @param response* @return*/@GetMapping(value = "generatorStr")public void generator(HttpServletRequest request, HttpServletResponse response) {try {CaptchaUtil.out(request, response);} catch (IOException e) {throw new RuntimeException(e);}}/*** 生成数字验证码** @param request* @param response* @return*/@GetMapping(value = "generatorNum")public void generatorNum(HttpServletRequest request, HttpServletResponse response) {try {ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(200, 250);arithmeticCaptcha.setLen(2);CaptchaUtil.out(arithmeticCaptcha, request, response);} catch (IOException e) {throw new RuntimeException(e);}}/*** 生成中文验证码** @param request* @param response* @return*/@GetMapping(value = "generatorChinese")public void generatorChinese(HttpServletRequest request, HttpServletResponse response) {try {ChineseCaptcha chineseCaptcha = new ChineseCaptcha(200, 250);chineseCaptcha.setLen(2);CaptchaUtil.out(chineseCaptcha, request, response);} catch (IOException e) {throw new RuntimeException(e);}}/*** 生成中文动态验证码** @param request* @param response* @return*/@GetMapping(value = "generatorChineseGif")public void generatorChineseGif(HttpServletRequest request, HttpServletResponse response) {try {ChineseGifCaptcha chineseGifCaptcha = new ChineseGifCaptcha(200, 250);chineseGifCaptcha.setLen(2);CaptchaUtil.out(chineseGifCaptcha, request, response);} catch (IOException e) {throw new RuntimeException(e);}}/*** 生成字符动态验证码** @param request* @param response* @return*/@GetMapping(value = "generatorGif")public void generatorGif(HttpServletRequest request, HttpServletResponse response) {try {GifCaptcha captcha = new GifCaptcha(200, 250);captcha.setLen(2);CaptchaUtil.out(captcha, request, response);} catch (IOException e) {throw new RuntimeException(e);}}/*** 生成字符动态验证码* 这个为默认验证码生成器* @param request* @param response* @return*/@GetMapping(value = "generatorSpec")public void generatorSpec(HttpServletRequest request, HttpServletResponse response) {try {SpecCaptcha captcha = new SpecCaptcha(200, 250);captcha.setLen(2);CaptchaUtil.out(captcha, request, response);} catch (IOException e) {throw new RuntimeException(e);}}/*** 验证码校验,并且验证通过后清除,下次不允许再用** @param verifyCode* @param request* @return*/@GetMapping("/verify")public String verify(String verifyCode, HttpServletRequest request) {Boolean aBoolean = CaptchaUtil.ver(verifyCode, request);if (aBoolean) {CaptchaUtil.clear(request); //清除验证码return "通过";}return "不通过";}

验证图解

使用数字运算验证

生成验证码:

校验验证码:
结果不对,不通过

结果正确,通过

源码测试GitHub

github 测试代码

Easy-Captcha验证码 生成以及校验(简单易懂)相关推荐

  1. JS 验证码生成及校验(详细注释)

    这是个非常简单的(粗糙)模拟验证码生成及校验的小案例,只简单的实现下功能,后续希望可以做验证码背景是有颗粒的,同时有干扰线...更符合实际场景的验证码生成及校验. 完整代码如下: <!DOCTY ...

  2. google captcha验证码生成工具使用教程 样式配置

    1.引入依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha& ...

  3. java 生成校验验证码_java 验证码生成与校验

    java绘图相关类 验证码工具类 package dt2008.util; import javax.imageio.ImageIO; import javax.servlet.http.HttpSe ...

  4. TP5验证码生成及验证

    TP5框架自带验证码模块,不过需要自行安装think-captcha扩展包,而think-captcha扩展包需要composer安装. 1.安装composer 因为composer安装包下载较慢, ...

  5. java 验证码生成和验证

    1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...

  6. 滑块验证码后台生成及校验

    目录 前言 思路流程 工具类代码 pom 抠图工具类 imageUtils 调用实现类 前言 在自己做的某一个项目中要求具备滑块验证码的功能,在翻阅部分博客后自己参考编写了一个后台的滑块验证码工具类, ...

  7. kaptcha 生成验证码并进行校验

    一.验证码校验策略: 生成图片验证码--->存入session---->前台提交验证码---->校验session存储的验证码字段 二.代码类 CaptchaConfig 验证码配置 ...

  8. java captcha 验证码_验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...

  9. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

最新文章

  1. 资产配置决策系统的MATLAB实现
  2. sqlserver 字段中只有年月 加上中文年月_PowerBI 10月更新,全新图标正式亮相
  3. 【JavaFx教程】第三部分:与用户的交互
  4. 听说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider
  5. 2022年计算机二级C语言程序设计模拟练习题及答案
  6. IDEA汉化包插件无法下载解决办法
  7. MATLAB批量添加图例
  8. Hspice中的测量语句(II)
  9. Dynamic CRM 2016 IFD配置(6)Claims-based认证-外部访问配置
  10. PHPMYWIND 教程之 碎片数据的使用GetFragment()
  11. 跟着Nature Microbiology学作图:R语言ggplot2做散点图添加拟合曲线和p值
  12. 更精进,更超能 | 一起开启 AI+X 微软认证未来创变者计划
  13. 浅谈自适应滤波器---(快速RLS算法)
  14. 在html中ex是什么单位,前端用到的那些单位
  15. Android 无需root实现apk的静默安装
  16. 1w+大学生在线学习,弘玑Cyclone与伯禹教育开展大学生RPA认证集训营
  17. Windows载图软件 FastStone Capturev9.6
  18. 如何引用YouTube视频?(APA、MLA、芝加哥、温哥华格式)
  19. 史蒂夫·乔布斯 - 简介
  20. 记一次对vue双向绑定的理解

热门文章

  1. webpack js混淆插件
  2. 记一次解决Intel 9462无线网卡的笔记本安装Ubuntu16.04后无法连接WIFI问题的艰难历程
  3. 两家超级工厂!德国成大赢家?英特尔170亿欧元造超级芯片工厂;瑞典电池巨头40亿欧元建电池超级工厂 | 美通社头条...
  4. 流水账——12.15
  5. 抓图软件之HyperSnap-DX Pro
  6. 【反思篇】细节决定成败
  7. Android点亮屏幕或屏幕解锁和锁定
  8. 利用matlab程序分别设计一正弦型信号_【电力电子】【2013.06】【含源码】永磁同步电动机三相逆变器的设计...
  9. 【最新】Android 手机分辨率整理(做屏幕适配的拿走)
  10. LikeLib侧链:搭建区块链系统信任传递桥梁