Easy-Captcha验证码 生成以及校验(简单易懂)
目录
- 说明
- 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验证码 生成以及校验(简单易懂)相关推荐
- JS 验证码生成及校验(详细注释)
这是个非常简单的(粗糙)模拟验证码生成及校验的小案例,只简单的实现下功能,后续希望可以做验证码背景是有颗粒的,同时有干扰线...更符合实际场景的验证码生成及校验. 完整代码如下: <!DOCTY ...
- google captcha验证码生成工具使用教程 样式配置
1.引入依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha& ...
- java 生成校验验证码_java 验证码生成与校验
java绘图相关类 验证码工具类 package dt2008.util; import javax.imageio.ImageIO; import javax.servlet.http.HttpSe ...
- TP5验证码生成及验证
TP5框架自带验证码模块,不过需要自行安装think-captcha扩展包,而think-captcha扩展包需要composer安装. 1.安装composer 因为composer安装包下载较慢, ...
- java 验证码生成和验证
1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...
- 滑块验证码后台生成及校验
目录 前言 思路流程 工具类代码 pom 抠图工具类 imageUtils 调用实现类 前言 在自己做的某一个项目中要求具备滑块验证码的功能,在翻阅部分博客后自己参考编写了一个后台的滑块验证码工具类, ...
- kaptcha 生成验证码并进行校验
一.验证码校验策略: 生成图片验证码--->存入session---->前台提交验证码---->校验session存储的验证码字段 二.代码类 CaptchaConfig 验证码配置 ...
- java captcha 验证码_验证码图片生成工具类——Captcha.java
验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...
- java 图形校验_java图形验证码生成工具类 web页面校验验证码
java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...
最新文章
- 资产配置决策系统的MATLAB实现
- sqlserver 字段中只有年月 加上中文年月_PowerBI 10月更新,全新图标正式亮相
- 【JavaFx教程】第三部分:与用户的交互
- 听说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider
- 2022年计算机二级C语言程序设计模拟练习题及答案
- IDEA汉化包插件无法下载解决办法
- MATLAB批量添加图例
- Hspice中的测量语句(II)
- Dynamic CRM 2016 IFD配置(6)Claims-based认证-外部访问配置
- PHPMYWIND 教程之 碎片数据的使用GetFragment()
- 跟着Nature Microbiology学作图:R语言ggplot2做散点图添加拟合曲线和p值
- 更精进,更超能 | 一起开启 AI+X 微软认证未来创变者计划
- 浅谈自适应滤波器---(快速RLS算法)
- 在html中ex是什么单位,前端用到的那些单位
- Android 无需root实现apk的静默安装
- 1w+大学生在线学习,弘玑Cyclone与伯禹教育开展大学生RPA认证集训营
- Windows载图软件 FastStone Capturev9.6
- 如何引用YouTube视频?(APA、MLA、芝加哥、温哥华格式)
- 史蒂夫·乔布斯 - 简介
- 记一次对vue双向绑定的理解
热门文章
- webpack js混淆插件
- 记一次解决Intel 9462无线网卡的笔记本安装Ubuntu16.04后无法连接WIFI问题的艰难历程
- 两家超级工厂!德国成大赢家?英特尔170亿欧元造超级芯片工厂;瑞典电池巨头40亿欧元建电池超级工厂 | 美通社头条...
- 流水账——12.15
- 抓图软件之HyperSnap-DX Pro
- 【反思篇】细节决定成败
- Android点亮屏幕或屏幕解锁和锁定
- 利用matlab程序分别设计一正弦型信号_【电力电子】【2013.06】【含源码】永磁同步电动机三相逆变器的设计...
- 【最新】Android 手机分辨率整理(做屏幕适配的拿走)
- LikeLib侧链:搭建区块链系统信任传递桥梁