PIG 实现接口防刷验证码
实现接口防刷验证码的配置和使用指南
本文档介绍如何在 Pig 框架中实现接口防刷验证码功能。命中爬虫和防盗刷规则后,会阻断请求,并生成解除阻断的验证码,验证码有多种组合方式,如果客户端可以正确输入验证码,则可以继续访问。
代码使用
1. 引入依赖
在 pig-upms-biz
中引入依赖:
2. 配置 Nacos
在 Nacos 配置文件中加入配置:
3. 配置 Pig-UI 异常拦截
在 pig-ui 的 src/router/axios
的 HTTPresponse 拦截器中添加异常拦截的配置:
4. 配置接口权限
在 Nacos 的 application-dev.yml
中添加相应配置,放开验证码回调接口的权限。
配置说明
所有配置均以 anti.reptile
为前缀。
配置项 | 描述 | 默认值 | 示例 |
---|---|---|---|
enabled | 是否启用反爬虫插件 | true | true |
globalFilterMode | 是否启用全局拦截模式 | false | true |
include-urls | 局部拦截时,需要反爬的接口列表,以’,‘分隔,支持正则匹配。全局拦截模式下无需配置 | 空 | /client,/user,^/admin/.*$ |
ip-rule.enabled | 是否启用 IP Rule | true | true |
ip-rule.expiration-time | 时间窗口长度 (ms) | 5000 | 5000 |
ip-rule.request-max-size | 单个时间窗口内,最大请求数 | 20 | 20 |
ip-rule.lock-expire | 命中规则后自动解除时间(单位:s) | 10 天 | 20 |
ip-rule.ignore-ip | IP 白名单,支持后缀’*‘通配,以’,‘分隔 | 空 | 192.168.*,127.0.0.1 |
ua-rule.enabled | 是否启用 User-Agent Rule | true | true |
ua-rule.allowed-linux | 是否允许 Linux 系统访问 | false | false |
ua-rule.allowed-mobile | 是否允许移动端设备访问 | true | true |
ua-rule.allowed-pc | 是否允许移 PC 设备访问 | true | true |
ua-rule.allowed-iot | 是否允许物联网设备访问 | false | false |
ua-rule.allowed-proxy | 是否允许代理访问 | false | false |
实现原理
我们引入依赖之后,实际上是通过 Spring Boot 自动装配了 AntiReptileAutoConfig 配置类。该类 Import 了 RedissonAutoConfig 和 WebMvcConfig 两个配置类。
核心组件
-
ServletRegistrationBean
- 注册 ValidateFormServlet,拦截
/kk-anti-reptile/validate
路径 - 处理验证码验证请求
- 注册 ValidateFormServlet,拦截
-
IpRule
- 实现 IP 级别的反爬规则
- 支持白名单配置
- 支持请求频率限制
-
UaRule
- 实现 User-Agent 级别的反爬规则
- 支持设备类型过滤
- 支持代理检测
-
VerifyImageUtil
- 生成验证码图片
- 管理验证码缓存
User-Agent 是终端的身份标识,服务器可以通过它判断请求来源。某些爬虫可能会伪造 User-Agent,因此需要结合其他规则进行防护。
♥️ 获取支持
遇到问题?
如果您在使用过程中遇到任何问题、有功能建议或需求,请点击此卡片前往 Gitee 仓库提交 Issue。