当前位置: 首页 > 科技观察

一个依赖处理SpringBoot反爬虫,防止接口被盗!

时间:2023-03-12 00:34:31 科技观察

kk-anti-reptile是基于spring-boot开发的适用于分布式系统的反爬虫组件。原文http://33s.co/6s37系统要求基于spring-boot开发(spring-boot1.x、spring-boot2.x都可以)需要使用redis工作流kk-anti-reptile使用Filterpair基于Servlet规范对请求进行过滤,通过spring-boot的扩展点机制在内部实例化一个Filter,注入到Spring容器FilterRegistrationBean中,通过Spring注入到Servlet容器中,从而实现对请求的过滤要求。kk-anti-reptile的过滤Filter内部,通过责任链模式编织了各种过滤规则,并提供了一个抽象接口,可以由调用者进行扩展。Filter调用链来过滤请求。如果过滤失败,则拦截请求,返回状态码509,并输出验证码输入页面。验证码无误后,调用过滤规则链重置规则。目前,规则链中有两条规则:ip-ruleip-rule通过时间窗口统计当前时间窗口内的请求数,如果小于指定的最大请求数,则可以通过,否则会没有通过。时间窗口、最大请求数、ip白名单等都可以配置。ua-ruleua-rule通过判断请求中携带的User-Agent获取操作系统、设备信息、浏览器信息等,可以配置各种维度对请求进行过滤。命中规则并命中爬虫和防盗刷规则后,请求将被拦截,并生成验证码,解锁验证码。验证码有多种组合。如果客户端可以正确输入验证码,则客户端可以继续访问验证码。中文、英文字母+数字、简单算术三种形式。每个表单都有两种图像格式:静态图片和GIF动画。目前有以下六种类型。各类验证码都会随机出现,目前的技术手段识别难度极高,可以有效防止爬虫爬虫进行大规模数据访问。使用后端访问非常简单。只需要参考kk-anti-reptile的maven依赖,配置并开启kk-anti-reptile添加maven依赖cn.keking.projectkk-anti-reptile1.0.0-SNAPSHOT配置启用kk-anti-reptileanti.reptile.manager.enabled=true前端需要在ajax所在的地方添加拦截统一发送请求。拦截请求返回509状态码后,会弹出一个新的页面,将响应内容传递给页面,然后将后台接口传入页面。baseUrl参数就足够了。以axios请求为例:importaxiosfrom'axios';import{baseUrl}from'./config';axios.interceptors.response.use(data=>{returndata;},error=>{if(error.response.status===509){lethtml=error.response.data;letverifyWindow=window.open("","_blank","height=400,width=560");verifyWindow.document.write(html);verifyWindow。document.getElementById("baseUrl"t;).value=baseUrl;}});exportdefaultaxios;注意apollo-client需要为使用apollo配置中心的用户开启bootstrap。由于组件内部使用了@ConditionalOnProperty,所??以需要在application.properties/bootstrap.properties中加入如下样例配置,(apollo-client需要0.10.0及以上版本)见apollobootstrap说明apollo.bootstrap.enabled=true需要一个Redisson连接如果项目中使用了Redisson,kk-anti-reptile会自动获取RedissonClient实例对象;如果没有用,需要在配置文件中添加如下Redisson连接相关配置:spring.redisson.address=redis://192.168.1.204:6379spring.redisson.password=xxx配置列表在spring-boot中,所有配置会在配置文件中有自动提示和说明,如下图所示:所有配置都以anti.reptile.manager为前缀,所有配置项和说明如下: