springboot生成图片验证码(借鉴并分析)

目录

  • 一、CaptchaUtil代码展示
  • 二、CaptchaController 代码展示

一、CaptchaUtil代码展示

package com.minster.yanapi.utils;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Properties;@Configuration
public class CaptchaUtil{@Beanpublic DefaultKaptcha getDefaultKaptcha() {DefaultKaptcha defaultKaptcha = new DefaultKaptcha();Properties properties = new Properties();properties.setProperty("kaptcha.border", "yes");properties.setProperty("kaptcha.border.color", "105,179,90");properties.setProperty("kaptcha.border.thickness","1");properties.setProperty("kaptcha.session.key", "code");properties.setProperty("kaptcha.textproducer.font.color", "blue");properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅 黑");properties.setProperty("kaptcha.textproducer.font.size", "30");properties.setProperty("kaptcha.textproducer.char.length", "4");properties.setProperty("kaptcha.textproducer.char.space", "4");properties.setProperty("kaptcha.image.width", "100");properties.setProperty("kaptcha.image.height", "40");Config config = new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}}

这段代码是一个基于Spring框架的验证码配置类,主要用于配置验证码生成器的属性和参数。

  1. @Configuration 注解标识这是一个配置类,用于定义 Spring Bean。

  2. CaptchaUtil 类定义了一个名为 getDefaultKaptcha 的方法,该方法使用 @Bean 注解,表示它会被Spring容器管理,并作为一个Bean提供。

  3. getDefaultKaptcha 方法中,创建了 DefaultKaptcha 类的实例,这是一个基于Google Kaptcha库的验证码生成器。

  4. 通过 Properties 对象配置验证码生成器的各种属性。以下是一些主要的配置项:

    • kaptcha.border: 是否有边框,这里设置为 “yes”。
    • kaptcha.border.color: 边框颜色,这里设置为 “105,179,90”。
    • kaptcha.session.key: 存储验证码的 session key,这里设置为 “code”。
    • kaptcha.textproducer.font.color: 验证码文本字符颜色,这里设置为 “blue”。
    • kaptcha.textproducer.font.names: 字体样式,这里设置为 “宋体,楷体,微软雅黑”。
    • kaptcha.textproducer.font.size: 字体大小,这里设置为 “30”。
    • kaptcha.textproducer.char.length: 验证码字符长度,这里设置为 “4”。
    • kaptcha.textproducer.char.space: 字符间距,这里设置为 “4”。
    • kaptcha.image.width: 验证码图片宽度,这里设置为 “100”。
    • kaptcha.image.height: 验证码图片高度,这里设置为 “40”。
  5. 创建一个 Config 对象,并将之前配置的 Properties 对象传递给它,用于构建验证码生成器的配置。

  6. 将配置好的 Config 对象设置到 DefaultKaptcha 实例中。

  7. 最后,返回配置好的 DefaultKaptcha 实例。

总体来说,这个配置类的作用是创建和配置一个用于生成验证码的 DefaultKaptcha Bean,并通过Spring容器进行管理。该验证码生成器的外观和行为由一系列属性值定义,这些属性值可以在配置中进行调整,以满足具体的需求。

二、CaptchaController 代码展示


@RestController
@RequestMapping("/code")
public class CaptchaController {@Autowiredprivate DefaultKaptcha defaultKaptcha;@GetMapping( "/captcha")public void captcha(HttpServletRequest request, HttpServletResponse response){//定义response输出类型为image/jpegresponse.setDateHeader("Expires",0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");response.setContentType("image/jpeg");//---------------------------生成验证码----------------------//获取验证码文本内容String text = defaultKaptcha.createText();System.out.println("验证码:  " + text);//将验证码放到session中request.getSession().setAttribute("captcha",text);//根据文本内容创建图形验证码BufferedImage image = defaultKaptcha.createImage(text);ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();//输出流输出图片,格式为jpgImageIO.write(image,"jpg",outputStream);outputStream.flush();} catch (IOException e) {e.printStackTrace();}finally {if (outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
}

上述代码是一个基于Spring框架的Java类,使用@RestController注解标识为一个RESTful风格的控制器,处理与验证码相关的HTTP请求。以下是对代码的详细分析:

  1. 类注解:

    • @RestController: 表示这是一个控制器类,并且所有方法都以JSON格式返回响应。
  2. 类声明:

    • @RequestMapping("/code"): 定义了类级别的请求映射,表示处理所有以"/code"开头的请求。
  3. 字段注入:

    • private DefaultKaptcha defaultKaptcha: 使用@Autowired注解进行依赖注入,注入了一个名为defaultKaptcha的DefaultKaptcha类型的Bean。
  4. 方法定义:

    • @GetMapping("/captcha"): 处理HTTP GET请求,映射路径为"/code/captcha"。
    • public void captcha(HttpServletRequest request, HttpServletResponse response): 处理验证码请求的方法,接受HttpServletRequest和HttpServletResponse作为参数。
  5. 验证码生成与输出:

    • 设置响应头,禁用缓存,确保验证码每次都是新的。
    • 获取验证码文本内容:String text = defaultKaptcha.createText();
    • 将验证码文本放入Session中:request.getSession().setAttribute("captcha", text);
    • 创建图形验证码:BufferedImage image = defaultKaptcha.createImage(text);
    • 获取输出流:ServletOutputStream outputStream = response.getOutputStream();
    • 将验证码图片以JPEG格式写入输出流:ImageIO.write(image, "jpg", outputStream);
    • 关闭输出流。
  6. 异常处理:

    • 在输出流操作中使用了try-catch块捕获IOException,并打印异常信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MMDetection3D v1.3.0安装教程

MMDetection3D v1.3.0安装教程 1. 系统环境2. 安装2.1 基本环境安装2.2 调整具体版本2.3 验证2.4 安装MinkowskiEngine和TorchSparse 3. 最终环境配置 根据 v1.3.0版本官方手册测试后的安装配置,亲测可行。 1. 系统环境 项目版本日期Ubuntu18.04.06 LTS-显卡RTX 2…

曾桂华:车载座舱音频体验探究与思考| 演讲嘉宾公布

智能车载音频 I 分论坛将于3月27日同期举办! 我们正站在一个前所未有的科技革新的交汇点上,重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融,智慧、便捷与未来的探索之旅正式扬帆起航。 在驾驶的旅途中&#xff0…

安装 Distribution Registry

Distribution Registry是由容器部署,所有前提是需要安装docker 参考文档:https://docs.docker.com/engine/install/centos/ Registry 官网文档 https://distribution.github.io/distribution/ 安装Registry仓库 docker run -d -p 5000:5000 --restartalw…

通过css修改video标签的原生样式

通过css修改video标签的原生样式 描述实现结果 描述 修改video标签的原生样式 实现 在控制台中打开设置,勾选显示用户代理 shadow DOM,就可以审查video标签的内部样式了 箭头处标出来的就是shodow DOM的内容,这些内容正常不可见的&#x…

MySQL 用了哪种默认隔离级别,实现原理是什么?

MySQL 的默认隔离级别是 RR - 可重复读,可以通过命令来查看 MySQL 中的默认隔离级别。 RR - 可重复读是基于多版本并发控制(Multi-Version Concurrency Control,MVCC )实现的。MVCC,在读取数据时通过一种类似快照的方…

视觉三维重建colmap框架的现状与未来

注:该文章首发3D视觉工坊,链接如下3D视觉工坊 前言 众所周知,三维重建的发展已经进入了稳定期,尤其是离线方案的发展几乎处于停滞期,在各大论刊上也很少见到传统sfmmvs亮眼的文章。这也不难理解,传统的多视…

MYSQL 解释器小记

解释器的结果通常通过上述表格展示: 1. select_type 表示查询的类型 simple: 表示简单的选择查询,没有子查询或连接操作 primary:表示主查询,通常是最外层的查询 subquery :表示子查询,在主查询中嵌套的查询 derived: 表示派…

【王道数据结构】【chapter8排序】【P360t2】

试编写一个算法,使之能够在数组L[1……n]中找出第k小的元素(即从小到大排序后处于第k个位置的元素)(可以直接采用排序,但下面的排序的代码只是为了方便核对是不是第k小的元素,k从0开始计算) #in…

出海手游收入一路高歌,营销上如何成功?

出海手游收入一路高歌,营销上如何成功? 以RPG和SLG为代表的中重度游戏一直是国内厂商在海外市场的传统优势品类,因为它们具有较高的投资回报率,是国内厂商在国际市场上取得成功的“吸金”利器。 据伽马数据发布的《2023全球移动游…

SpringCloud搭建微服务之Consul服务配置

1. 概述 前面有介绍过Consul既可以用于服务注册和发现,也可以用于服务配置,本文主要介绍如何使用Consul实现微服务的配置中心,有需要了解如何安装Consul的小伙伴,请查阅SpringCloud搭建微服务之Consul服务注册与发现 &#xff0c…

steam怎么付款

信用卡支付 登录Steam账户,选择需要购买的游戏或其他物品,点击“加入购物车”。在购物车页面点击“去结账”按钮,进入付款页面。在付款页面选择信用卡付款方式,填写信用卡信息,输入验证码,点击确认付款。 …

Servlet 新手村引入-编写一个简单的servlet项目

Servlet 新手村引入-编写一个简单的servlet项目 文章目录 Servlet 新手村引入-编写一个简单的servlet项目一、编写一个 Hello world 项目1.创建项目2.引入依赖3.手动创建一些必要的目录/文件4.编写代码5.打包程序6.部署7.验证程序 二、更方便的处理方案(插件引入&am…

autocrlf和safecrlf

git远程拉取及提交代码,windows和linux平台换行符转换问题,用以下两行命令进行配置: git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平台下的换行符,LF是linux平台下的换行符。…

98 greenplum 集群搭建过程中碰到的几个问题

前言 最近有搭建 greenplum 集群的需求 然后 在搭建的过程中碰到了一些问题, 还是有一些时间开销 并且问题也稍微有些复杂, 因此记录一下 1. Do not have enough valid segments to start the array. 报错日志信息如下 20220408:14:15:29:021638 gpstart:gp1:gpadmin-[I…

基于springboot+vue的公交线路查询系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用,如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等,它们通常具有防抖防震、深度防水和高清画质的特点,能够适应颠簸剧烈的环境,甚至可以承受一定程度的摔落,一些运动相…

基于systick实现获取系统运行时间

基于systick实现获取系统运行时间 文章目录 基于systick实现获取系统运行时间systick.c代码结构:代码功能:总结 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

数学建模【聚类模型】

一、聚类模型简介 “物以类聚&#xff0c; 人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff0c;也可以探究不同类之间的相关性和…

springboot233大学生就业需求分析系统

大学生就业需求分析系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff…

C语言-简单的环形队列的源码示例

概述 环形队列&#xff08;Circular Queue&#xff09;是一种常见的数据结构&#xff0c;特别适用于在单片机等资源受限的环境下实现缓冲区或队列功能。下面是一个简单的环形队列的源码示例&#xff0c;用C语言实现&#xff1a; #include <stdio.h> #include <stdint…