文章目录

  • 一、生成数字加减验证码
  • 二、糊涂工具类生产验证码
  • 三、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生产验证码各种工具类相关推荐

  1. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

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

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

  3. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  4. 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)

    文章目录 <Java并发编程的艺术>读后笔记-Java中的并发工具类(第八章) 1.等待多线程完成的CountDownLatch 2.同步屏障CyclicBarrier 2.1 Cycli ...

  5. 邮箱验证码发送工具类(秒发)

    如题,不做过多介绍,直接上代码 package util;import javax.mail.Session; import javax.mail.Transport; import javax.ma ...

  6. 验证码识别服务器,一个非常好用的验证码识别工具类api接口

    一个非常好用的验证码识别工具类api接口 群发?批量操作?验证码?可能乖孩子对于这些单个有了解,但是对于合在一起就不知道其存在的意义.这个对 于我们日常的生活可能是没有什么用处的,但是对于需要批量检测 ...

  7. java图片缩放工具类,一个JAVA图形缩放处置工具类

    一个JAVA图形缩放处理工具类 调用的例子 import java.io.FileOutputStream; import java.io.IOException; import javax.imag ...

  8. JAVA I/O流工具类TextFile

    JAVA I/O流工具类TextFile由广州疯狂软件java培训分享: 本文是一个TextFile类,通过这个类我们可以调用其中的方法来简化对文件的读写,这段代码的可用性比较强.这个TextFile ...

  9. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

最新文章

  1. ttf,woff2字体转化为png图片,python读取图片
  2. 通过url,获取html内容,并解析
  3. HDU 2196 Computer 树形DP经典题
  4. c mysql封装 jdbc_彻底封装JDBC操作MySQL的连接。
  5. 美国互联网广告07年总开支255亿美元, 增长27%
  6. Spring Boot结合spring-data-jpa
  7. Exchange2010应用地址列表
  8. Consul服务治理原理简介及使用过程
  9. 使用log4net记录日志到数据库(含有自定义属性)
  10. Windows下安装NPM
  11. 巨头垂涎却不能染指,loT 数据库风口已至
  12. 关于Python切片的问题,从左向右提取元素与从右向左提取元素
  13. 港科夜闻丨香港科大团队最新研究:双色发射AIEgen用于无标记特异性识别dsDNA和SNPs检测...
  14. 淘宝客订单查询API参数说明
  15. Unsupervised Person Re-identification: Clustering and Fine-tuning
  16. 看懂了一点傅里叶变换的原理
  17. access 组合框模糊筛选
  18. undeclared name问题,一定要仔细啊
  19. 最新网络管理员考试大纲
  20. vb.net 如何实现报表打印_如何实现流水条码的特殊排版打印

热门文章

  1. 7-29 喊山 (30 point(s))
  2. C++学习课件(三)
  3. 菲律宾的光伏市场只有一个字概况:穷
  4. 此时不应有 \Microsoft 或其它的解决办法
  5. 数据结构和算法 第二小题 九宫重排(1)
  6. 随机森林遥感影像识别+Rater转MultiShp
  7. csdn活动:免费领取会员哈!
  8. 通俗解释网络语到底什么是PTSD?什么是饭圈PTSD?
  9. 面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波
  10. label fusion 学习记录