5 分钟快速上手图形验证码,防止接口被恶意刷量!

2025-12-10 20:46:48 by admin 同城交友

5 分钟快速上手图形验证码,防止接口被恶意刷量!

大家好,我是程序员小白条,今天来给大家介绍一个快速实现图形验证码的优秀框架 AJ-Captcha。

需求分析

如果注册接口没有验证码这种类型的限制,很容易会被刷量,因此,一般都会使用邮箱验证码或者图形验证码进行限制,防止被恶意刷接口。邮箱验证码比较容易的是 QQ 验证码,直接配合 SpringMail 即可实现,本文主要实现图形验证码。

文字验证如下

滑动验证如下

后端

1)pom.xml 引入官方依赖包

com.anji-plus

spring-boot-starter-captcha

1.3.0

2)设置配置文件 properties 或者 yml 格式

# 滑动验证,底图路径,不配置将使用默认图片

# 支持全路径

# 支持项目路径,以classpath:开头,取resource目录下路径,例:classpath:images/jigsaw

aj:

captcha:

# jigsaw: "classpath:images/jigsaw"

#滑动验证,底图路径,不配置将使用默认图片

##支持全路径

# 支持项目路径,以classpath:开头,取resource目录下路径,例:classpath:images/pic-click

# pic-click: "classpath:images/pic-click"

# 对于分布式部署的应用,我们建议应用自己实现CaptchaCacheService,比如用Redis或者memcache,

# 参考CaptchaCacheServiceRedisImpl.java

# 如果应用是单点的,也没有使用redis,那默认使用内存。

# 内存缓存只适合单节点部署的应用,否则验证码生产与验证在节点之间信息不同步,导致失败。

# !!! 注意啦,如果应用有使用spring-boot-starter-data-redis,

# 请打开CaptchaCacheServiceRedisImpl.java注释。

# redis -----> SPI: 在resources目录新建META-INF.services文件夹(两层),参考当前服务resources。

# 缓存local/redis...

cache-type: local

# local缓存的阈值,达到这个值,清除缓存

#cache-number: 1000

# local定时清除过期缓存(单位秒),设置为0代表不执行

#timing-clear: 180

#spring.redis.host: 10.108.11.46

#spring.redis.port: 6379

#spring.redis.password:

#spring.redis.database: 2

#spring.redis.timeout: 6000

# 验证码类型default两种都实例化。

type: default

# 汉字统一使用Unicode,保证程序通过@value读取到是中文,可通过这个在线转换;yml格式不需要转换

# https://tool.chinaz.com/tools/unicode.aspx 中文转Unicode

# 右下角水印文字(我的水印)

water-mark: "\u6211\u7684\u6c34\u5370"

# 右下角水印字体(不配置时,默认使用文泉驿正黑)

# 由于宋体等涉及到版权,我们jar中内置了开源字体【文泉驿正黑】

# 方式一:直接配置OS层的现有的字体名称,比如:宋体

# 方式二:自定义特定字体,请将字体放到工程resources下fonts文件夹,支持ttf\ttc\otf字体

#water-font: WenQuanZhengHei.ttf

# 点选文字验证码的文字字体(文泉驿正黑)

#font-type: WenQuanZhengHei.ttf

# 校验滑动拼图允许误差偏移量(默认5像素)

slip-offset: 5

# aes加密坐标开启或者禁用(true|false)

aes-status: true

# 滑动干扰项(0/1/2)

interference-options: 2

#点选字体样式 默认Font.BOLD

font-style: 1

#点选字体字体大小

font-size: 25

#点选文字个数,存在问题,暂不支持修改

#click-word-count: 4

history-data-clear-enable: false

# 接口请求次数一分钟限制是否开启 true|false

req-frequency-limit-enable: false

# 验证失败5次,get接口锁定

req-get-lock-limit: 5

# 验证失败后,锁定时间间隔,s

req-get-lock-seconds: 360

# get接口一分钟内请求数限制

req-get-minute-limit: 30

# check接口一分钟内请求数限制

req-check-minute-limit: 60

# verify接口一分钟内请求数限制

req-verify-minute-limit: 60

3)创建一个配置类,让 SpringBoot 启动时,扫描到即可

@Configuration

public class CaptchaConfig {

@Bean(name = "CaptchaCacheService")

@Primary

public CaptchaCacheService captchaCacheService(AjCaptchaProperties config){

//缓存类型redis/local/....

CaptchaCacheService ret = CaptchaServiceFactory.getCache(config

Copyright © 2088 0762网游争霸活动中心 All Rights Reserved.
友情链接