Java生产验证码各种工具类
文章目录
- 一、生成数字加减验证码
- 二、糊涂工具类生产验证码
- 三、Happy-captcha生产验证码
- 四、easy-captcha生成验证码
- 五、Kcaptcha生成验证码
一、生成数字加减验证码
1、工具类:
/*** @Author: Mr.ZJW* @Date: 2022-04-20 8:59* @Description: 验证码工具类*/
@Data
public class ImageCode {//图形内容public String code;//图片public ByteArrayInputStream image;//宽private int wight = 400;//高private int height = 100;public static ImageCode getInstance() {return new ImageCode();}public ImageCode() {//图形缓冲区BufferedImage image = new BufferedImage(wight, height, BufferedImage.TYPE_3BYTE_BGR);//画笔Graphics graphics = image.getGraphics();//设置颜色graphics.setColor(new Color(46, 173, 144));//画矩形graphics.fillRect(0, 0, wight, height);//设置字体graphics.setFont(new Font("宋体", Font.PLAIN, 30));//设置随机数Random random = new Random();//算数验证码int num1 = random.nextInt(20);int num2 = random.nextInt(20);//设置颜色graphics.setColor(new Color(2, 0, 0));//画图int Y = 60;graphics.drawString(String.valueOf(num1), wight / 6 * 0 + 50, Y);graphics.drawString("+", wight / 6 * 1 + 50, Y);graphics.drawString(String.valueOf(num2), wight / 6 * 2 + 50, Y);graphics.drawString("=", wight / 6 * 3 + 50, Y);graphics.drawString("?", wight / 6 * 4 + 50, Y);//计算值int result = num1 + num2;this.code = result+"";//收笔graphics.dispose();ByteArrayInputStream inputStream = null;ByteOutputStream outputStream = new ByteOutputStream();//赋值给ByteArrayInputStreamtry {ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(outputStream);ImageIO.write(image, "jpg", imageOutputStream);inputStream = new ByteArrayInputStream(outputStream.toByteArray());} catch (IOException e) {e.printStackTrace();}//生成图片this.image = inputStream;}}
2、controller:
这里存放到redis中了,redis配置自行配。
也可以存放到session中,改为session就行。
@Autowiredprivate StringRedisTemplate redisTemplate;/*** @Author: Mr.ZJW* @Description: 生成加减验证码* @Date: 2022/4/20 8:53* @param response*/@GetMapping("/generatorCode")public void generatorCode(HttpServletResponse response) {ImageCode imageCode = ImageCode.getInstance();//获取验证码内容String code = imageCode.getCode();//存放到RedisredisTemplate.opsForValue().set("Code",code);//获取图片ByteArrayInputStream image = imageCode.getImage();//设置内容类型response.setContentType("image/jpg");byte[] bytes = new byte[1024];try (ServletOutputStream outputStream = response.getOutputStream()){while (image.read(bytes) != -1){outputStream.write(bytes);}} catch (IOException e) {e.printStackTrace();}}/*** @author: Mr.ZJW* @date: 2022/4/21 15:50* @description: 校验验证码*/@GetMapping("/verifyCode")public String verifyCode(String code){//获取验证码结果String result = redisTemplate.opsForValue().get("Code");if (code.equals(result)) {return "success";}return "error";}
3、测试效果:
先请求生产验证码:这里答案是12
在请求校验接口看是否正确
二、糊涂工具类生产验证码
1、引入依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version></dependency>
2、生产验证码
这里是生成吧验证码生成一张图片,渲染到页面,前端直接拿就行
/*** @author: Mr.ZJW* @date: 2022/4/21 11:51* @description: 生成验证码*/@GetMapping("/getCode")public void getCode(HttpServletResponse response){//定义图形验证码的长和宽LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(116, 36,4,5);//存放到RedisredisTemplate.opsForValue().set("Code",lineCaptcha.getCode());try {ServletOutputStream outputStream = response.getOutputStream();//验证码写到页面上lineCaptcha.write(outputStream);//关闭outputStream.close();} catch (IOException e) {e.printStackTrace();}}
3、测试效果
校验跟同上,自行校验
三、Happy-captcha生产验证码
官网:https://gitee.com/ramostear/Happy-Captcha?_from=gitee_search
1、导入依赖:
<!--验证码工具类--><dependency><groupId>com.ramostear</groupId><artifactId>Happy-Captcha</artifactId><version>1.0.1</version></dependency>
2、生产验证码:
/*** @author: Mr.ZJW* @date: 2022/4/21 16:59* @description: Happy-Captcha工具类生成验证码*/@GetMapping("/generateCode")public void generateCode(HttpServletResponse response, HttpServletRequest request){HappyCaptcha.require(request, response).style(CaptchaStyle.ANIM) //设置样式.build().finish();}/*** @author: Mr.ZJW* @date: 2022/4/21 15:50* @description: 校验Happy-Captcha工具类生成的验证码*/@GetMapping("/verifyHappyCaptcha")public String verifyHappyCaptcha(String code,HttpServletRequest request){boolean verification = HappyCaptcha.verification(request, code, true);if (verification) {//如果通过清楚当前验证码验证HappyCaptcha.remove(request);return "success";}return "error";}
3、测试:
四、easy-captcha生成验证码
依赖:
<dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version></dependency>
1、生成验证码:
/*** @author: Mr.ZJW* @date: 2022/4/21 15:50* @description: easyGenerateCode工具类生成的验证码*/@GetMapping("/easyGenerateCode")public void easyGenerateCode(HttpServletResponse response, HttpServletRequest request) {// //生成普通验证码
// SpecCaptcha specCaptcha = new SpecCaptcha();//生成算数验证码ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha();//设置2为算数arithmeticCaptcha.setLen(2);//验证码结果String content = arithmeticCaptcha.text();//存放到Redis中redisTemplate.opsForValue().set("code", content);try {com.wf.captcha.utils.CaptchaUtil.out(arithmeticCaptcha, request, response);} catch (IOException e) {e.printStackTrace();}}
2、效果:
普通验证码:
算数验证码:
五、Kcaptcha生成验证码
官网:https://gitee.com/
1、引入maven依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>kaptcha-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>
2、在Controller使用Kaptcha:
@RestController
@RequestMapping("/kaptcha")
public class KaptchaController {@Autowiredprivate Kaptcha kaptcha;//生成验证码@GetMapping("/render")public void render() {kaptcha.render();}//校验验证码@PostMapping("/valid")public void validDefaultTime(@RequestParam String code) {//default timeout 900 secondskaptcha.validate(code);}//过期时间@PostMapping("/validTime")public void validWithTime(@RequestParam String code) {kaptcha.validate(code, 60);}}
3、测试效果:
还有很多的样式以及格式自行测试
Java生产验证码各种工具类相关推荐
- java图形验证码生成工具类
转载自 java图形验证码生成工具类 生成验证码效果 ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...
- java 图形校验_java图形验证码生成工具类 web页面校验验证码
java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...
- 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)
文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...
- 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)
文章目录 <Java并发编程的艺术>读后笔记-Java中的并发工具类(第八章) 1.等待多线程完成的CountDownLatch 2.同步屏障CyclicBarrier 2.1 Cycli ...
- 邮箱验证码发送工具类(秒发)
如题,不做过多介绍,直接上代码 package util;import javax.mail.Session; import javax.mail.Transport; import javax.ma ...
- 验证码识别服务器,一个非常好用的验证码识别工具类api接口
一个非常好用的验证码识别工具类api接口 群发?批量操作?验证码?可能乖孩子对于这些单个有了解,但是对于合在一起就不知道其存在的意义.这个对 于我们日常的生活可能是没有什么用处的,但是对于需要批量检测 ...
- java图片缩放工具类,一个JAVA图形缩放处置工具类
一个JAVA图形缩放处理工具类 调用的例子 import java.io.FileOutputStream; import java.io.IOException; import javax.imag ...
- JAVA I/O流工具类TextFile
JAVA I/O流工具类TextFile由广州疯狂软件java培训分享: 本文是一个TextFile类,通过这个类我们可以调用其中的方法来简化对文件的读写,这段代码的可用性比较强.这个TextFile ...
- java redis remove_最全的Java操作Redis的工具类
RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...
最新文章
- ttf,woff2字体转化为png图片,python读取图片
- 通过url,获取html内容,并解析
- HDU 2196 Computer 树形DP经典题
- c mysql封装 jdbc_彻底封装JDBC操作MySQL的连接。
- 美国互联网广告07年总开支255亿美元, 增长27%
- Spring Boot结合spring-data-jpa
- Exchange2010应用地址列表
- Consul服务治理原理简介及使用过程
- 使用log4net记录日志到数据库(含有自定义属性)
- Windows下安装NPM
- 巨头垂涎却不能染指,loT 数据库风口已至
- 关于Python切片的问题,从左向右提取元素与从右向左提取元素
- 港科夜闻丨香港科大团队最新研究:双色发射AIEgen用于无标记特异性识别dsDNA和SNPs检测...
- 淘宝客订单查询API参数说明
- Unsupervised Person Re-identification: Clustering and Fine-tuning
- 看懂了一点傅里叶变换的原理
- access 组合框模糊筛选
- undeclared name问题,一定要仔细啊
- 最新网络管理员考试大纲
- vb.net 如何实现报表打印_如何实现流水条码的特殊排版打印