当前位置: 首页 > news >正文

SpringBoot:kaptcha生成验证码

         GitHub项目地址:GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine.

kaptcha介绍 

        kaptcha官网(Google Code Archive - Long-term storage for Google Code Project Hosting.)对其介绍如下,

kaptcha十分易于安装和使用,并且所生成的验证码难以被破解。

可以通过框架的模块配置,来产出不同形式的输出内容。

kaptcha使用 

项目依赖

<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version>
</dependency>

基本参数配置|Bean注入

        可参考官网文档:Google Code Archive - Long-term storage for Google Code Project Hosting.

Producer接口与相关方法

        参数配置的主要目的为Bean实例提供属性信息,这里的Bean实例其实就是Kaptcha框架内置的com.google.code.kaptcha.Producer接口实例,其实该框架内置了一个接口实现子类:DefaultKaptcha,只是没有直接注入到Spring容器中。

        查看该接口的源码,可以看到它声明了两个抽象方法:

createImage:创建一个包含验证码的图像,返回值类型为BufferedImage,提供了对Image图像数据的缓冲支持。
createText:创建一个简单的文本验证码。
package com.google.code.kaptcha;import java.awt.image.BufferedImage;/*** Responsible for creating captcha image with a text drawn on it.*/
public interface Producer
{/*** Create an image which will have written a distorted text.* * @param text*            the distorted characters* @return image with the text*/public BufferedImage createImage(String text);/*** @return the text to be drawn*/public abstract String createText();
}

 

BufferedImage类

Bean注入配置

因此,我们要将其手动注入到SpringBean容器中(也可以自定义Producer接口的实现子类),以便于后续生成验证码的操作。可以结合@Configuration、@Bean注解进行配置。

        示例代码如下,参数含义已经在注释部分做了说明,

package com.example.soilcommon.core.kaptcha;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;import static com.google.code.kaptcha.Constants.*;/*** kaptcha验证码插件配置*/
@Configuration
public class KaptchaConfig {/*** 注入Bean实例* @return DefaultKaptcha*/@Bean(name = "defaultKaptcha")public DefaultKaptcha getDefaultKaptcha(){DefaultKaptcha defaultKaptcha = new DefaultKaptcha();Properties properties = new Properties();// 是否有边框 默认为true 我们可以自己设置yes,noproperties.setProperty(KAPTCHA_BORDER, "no");// 验证码文本字符颜色 默认为Color.BLACKproperties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");// 验证码图片宽度 默认为200properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");// 验证码图片高度 默认为50properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");// 验证码文本字符大小 默认为40properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");// KAPTCHA_SESSION_KEYproperties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");// 验证码文本字符长度 默认为5-修改为4properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");// 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");// 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpyproperties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");Config config = new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}
}

生成验证码

接下来我们借助com.google.code.kaptcha.Producer接口实例提供的两个方法:createImage、createText来分别生成图像验证码、文本验证码。

        示例代码如下, 

package com.example.soilcommon.service.impl;import com.example.soilcommon.service.KaptchaService;
import com.google.code.kaptcha.Producer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.awt.image.BufferedImage;@Service
public class KaptchaServiceImpl implements KaptchaService {@Autowiredprivate Producer producer;@Overridepublic String createCaptchaText() {return producer.createText();}@Overridepublic BufferedImage createCaptchaImage(String captchaText) {return producer.createImage(captchaText);//图像验证码;}}
http://www.lryc.cn/news/239795.html

相关文章:

  • C/C++ 使用API实现数据压缩与解压缩
  • Visual Studio连接unity编辑器_unity基础开发教程
  • 2023亚太杯数学建模B题思路分析 - 玻璃温室中的微气候法规
  • 轻量封装WebGPU渲染系统示例<37>- 多个局部点光源应用于非金属材质形成的效果(源码)
  • 设备状态监测与故障诊断系统的作用
  • 浮点数运算精度丢失,如何解决
  • 使用微信小程序openMapApp接口,报错问题解决openMapApp:fail invaild coord
  • 2023亚太杯数学建模思路 - 案例:粒子群算法
  • 【开源】基于JAVA的开放实验室管理系统
  • LeetCode48旋转图像
  • sql手工注入漏洞测试(MYSQL)-墨者-url信息
  • 52.seata分布式事务
  • HTML所有功能大汇总
  • 层次分析法--可以帮助你做决策的简单算法
  • docker启动链接sqlservr的镜像时报SSl错误
  • 力扣:175. 组合两个表(Python3)
  • 【libGDX】使用Mesh绘制矩形
  • X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS
  • 基于VM虚拟机下Ubuntu18.04系统,Hadoop的安装与详细配置
  • 【图像分类】基于深度学习的垃圾分类系统的设计与实现(ResNet网络,附代码和数据集)
  • MFS分布式文件系统
  • Hadoop -hdfs的读写请求
  • 【c++Leetcode】206. Reverse Linked List
  • [项目管理-33/创业之路-87/管理者与领导者-127]:如何提升自己项目管理的能力和水平
  • 记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查
  • c# 基础语法
  • 【译】什么时候使用 Spring 6 JdbcClient
  • VR全景:赋能城市园区建设,打造3DVR城市名片
  • 孟德尔随机化写作技巧mr
  • 社会媒体营销提问常用的ChatGPT通用提示词模板