SpringBoot:kaptcha生成验证码

news/2024/11/15 4:10:07/

         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.ppmy.cn/news/1235425.html

相关文章

DrugMAP: molecular atlas and pharma-information of all drugs学习

DrugMAP&#xff1a;所有药物的分子图谱和制药信息 - PMC (nih.gov) DrugMAP: the molecular atlas and pharma-information of drugs (idrblab.net) 构建了一个描述药物分子图谱和药物信息的新数据库&#xff08;DrugMAP&#xff09;。它提供了>30 000种药物/候选药物的相…

minio集群部署(k8s内)

一、前言 minio的部署有几种方式&#xff0c;分别是单节点单磁盘&#xff0c;单节点多磁盘&#xff0c;多节点多磁盘三种方式&#xff0c;本次部署使用多节点多磁盘的方式进行部署&#xff0c;minio集群多节点部署最低要求需要4个节点&#xff0c;集群扩容时也是要求扩容的节点…

渗透实例------2个星期艰难的渗透纪实

2个星期艰难的渗透纪实 kyo327 入侵原因,需删一帖子,目标用www.111.com代替,前期通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1: 图1 再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索…

世界这么大,极米投影仪RS Pro 3任意门带你“云旅游”

在繁忙的工作之后&#xff0c;许多小伙伴选择出门旅游&#xff0c;但也有不少人想在家“躺平”。其实&#xff0c;对于当代年轻人来说&#xff0c;行走在钢筋混凝土丛林&#xff0c;在家用智能投影观影娱乐好好放松身心也是不错的选择。有一台投影仪来相伴&#xff0c;能够抚平…

如何将本地websocket发布至公网并实现远程访问?

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…

本地canal安装和使用

1、组件版本 canal.deployer-1.1.7 kafka_2.13-2.6.0 jdk8 apache-zookeeper-3.6.0-bin mysql5.7 2、解压canal.deployer-1.1.7 2.1、修改canal.properties配置文件 ##改为kafka canal.serverModekafka## 改为instance canal.destinations instance## 改为true&#x…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

智慧储能边缘计算网关应用,提升能源效率

智慧储能通过边缘计算网关物联网技术来实现对储能电池等设备的在线监控和远程管理。边缘计算网关可以将储能数据转化为可用的信息&#xff0c;并传输到储能系统中&#xff0c;为储能管理提供优化与调度等数据支持。 边缘计算网关在智慧储能系统中起到了关键的作用。IR4000边缘计…