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

依赖获取SpringBoot接口防盗刷

时间:2023-03-13 08:10:47 科技观察

kk-anti-reptile是一款适用于基于spring-boot开发的分布式系统的反爬虫组件。系统要求基于spring-boot开发(spring-boot1.x、spring-boot2.x均可)需要使用redis工作流kk-anti-reptile使用基于Servlet规范的Filter对请求进行过滤,内部通过spring-boot的扩展点机制实例化一个Filter注入到Spring容器FilterRegistrationBean中,通过Spring注入到Servlet容器中实现对请求的过滤。kk-anti-reptile的过滤Filter内部,通过责任链模式编织了各种过滤规则,并提供了一个抽象接口,可以由调用者进行扩展。Filter调用链来过滤请求。如果过滤失败,则拦截请求,返回状态码509,并输出验证码输入页面。验证码无误后,调用过滤规则链重置规则。目前规则链中有两条规则:ip-rule:ip-rule通过时间窗口统计当前时间窗口内的请求数。如果请求数小于指定的最大数,则可以通过,否则不通过。时间窗口、最大请求数、ip白名单等都可以配置。ua-rule:ua-rule通过判断请求中携带的User-Agent获取操作系统、设备信息、浏览器信息等,可以配置各种维度对请求进行过滤。命中规则并命中爬虫和防盗刷规则后,请求将被拦截,并生成解禁验证码。验证码有多种组合。如果客户端可以正确输入验证码,则可以继续访问:验证码有中文、英文字母+数字、简单算术三种形式。每个表格都有两种图片格式:静态图片和GIF动画。也就是说,目前有以下六种类型。所有类型的验证码都会随机出现。目前的技术手段识别难度极大,可以有效防止爬虫大规模爬取数据:访问非常简单,使用后台访问即可。只需要参考kk-anti-reptile的maven依赖,配置并启用kk-anti-reptile加入maven依赖:cn.keking.projectkk-anti-reptile1.0.0-SNAPSHOT配置启用kk-anti-reptile:anti.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").value=baseUrl;}});导出默认axios;注意事项(1)apollo-client需要开启bootstrap才能使用apollo配置中心用户,由于组件内部使用了@ConditionalOnProperty,所??以需要在application中。在properties/bootstrap.properties中添加如下样例配置,(apollo-client需要0.10.0及以上版本)详见apollobootstrap说明:apollo.bootstrap.enabled=true(2)如果使用Redisson则需要Redisson连接项目中,kk-??anti-reptile会自动获取RedissonClient实例对象;如果不使用,需要在配置文件中添加如下Redisson连接相关配置:spring.redisson.address=redis://192.168.1.204:6379spring.redisson.password=xxx配置列表在spring-boot中,所有配置会在配置文件中自动提示和说明,如下图:所有配置都以anti.reptile.manager为前缀,所有配置项和说明如下: