基于SpringCloud开发的分布式系统,遇到爬虫、接口盗刷怎么办?
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依赖
<dependency><groupId>cn.keking.project</groupId><artifactId>kk-anti-reptile</artifactId><version>1.0.0-SNAPSHOT</version>
</dependency>
配置启用 kk-anti-reptile
anti.reptile.manager.enabled=true
前端需要在统一发送请求的ajax处加入拦截,拦截到请求返回状态码509后弹出一个新页面,并把响应内容转出到页面中,然后向页面中传入后端接口baseUrl参数即可,以使用axios请求为例:
import axios from 'axios';
import {baseUrl} from './config';axios.interceptors.response.use(data => {return data;},error => {if (error.response.status === 509) {let html = error.response.data;let verifyWindow = window.open("","_blank","height=400,width=560");verifyWindow.document.write(html);verifyWindow.document.getElementById("baseUrl").value = baseUrl;}}
);export default axios;
注意
1.apollo-client需启用bootstrap
使用apollo配置中心的用户,由于组件内部用到@ConditionalOnProperty,要在application.properties/bootstrap.properties中加入如下样例配置,(apollo-client需要0.10.0及以上版本)
apollo.bootstrap.enabled = true
2.需要有Redisson连接
如果项目中有用到Redisson,kk-anti-reptile会自动获取RedissonClient实例对象; 如果没用到,需要在配置文件加入如下Redisson连接相关配置
spring.redisson.address=redis://192.168.1.204:6379
spring.redisson.password=xxx
配置一览表
在spring-boot中,所有配置在配置文件都会有自动提示和说明,如下图
所有配置都以anti.reptile.manager为前缀,如下为所有配置项及说明
来源:https://www.oschina.net/p/kk-anti-reptile
关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
猜你喜欢
1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别
9、2T架构师学习资料干货分享
基于SpringCloud开发的分布式系统,遇到爬虫、接口盗刷怎么办?相关推荐
- 基于SpringCloud开发rabbitmq五种工作模式实现
工作模式 1. RabbitMQ消息模型 2. SpringAMQP 2.1. Basic Queue 简单队列模型 2.1.1.消息发送 2.1.2.消息接收 2.1.3.测试 2.2. WorkQ ...
- bootstrap table传回的数据后端怎么获取_基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办
kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件. 一.系统要求 基于spring-boot开发(spring-boot1.x, spring-boot2 ...
- 基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | oschina.net/p/kk-anti-reptil ...
- Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
责编:乐乐 链接:oschina.net/news/112586/kk-anti-reptile-released kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系 ...
- 遇到爬虫、接口盗刷怎么办?反爬虫组件来助你
长按识别下方二维码,即可"关注"公众号 每天早晨,干货准时奉上! 本文来源:oschina.net/p/kk-anti-reptile kk-anti-reptile是,适用于基于 ...
- Spring Boot反爬虫,防止接口盗刷
做电商网站的时候,总有竞争对手利用爬虫来爬你的数据.如果你没有反爬虫措施,网站都可能被爬垮.好在阿里云现在有一些基础服务,可以帮你反爬虫,但是费用太贵.作为程序员,我们还是希望自己动手解决它! 我通过 ...
- 一个依赖解决 Spring Boot 反爬虫,防止接口盗刷
kk-anti-reptile 是适用于基于spring-boot开发的分布式系统的反爬虫组件 系统要求 基于 spring-boot 开发 (spring-boot1.x, spring-boot2 ...
- kk-anti-reptile——Spring Boot 反爬虫,防止接口盗刷
概述 kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的开源反爬虫接口防刷组件. 开源地址 https://gitee.com/kekingcn/kk-anti- ...
- 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
今日推荐 减少 try-catch ,这样做才叫优雅!让人上瘾的新一代开发神器,彻底告别Controller.Service.Dao等方法SpringBoot实现人脸识别功能相信我,使用 Stream ...
- 基于ITOP4412开发板的实时视频监控系统实现
实时视频监控系统实现 设计一种RTMP嵌入式监控系统,该系统基于服务器/客户端模式,用户使用PC机或者使用移动设备通过网络实时监控观测对象.系统基于ITOP4412开发板,通过V4L2接口从摄像头采集 ...
最新文章
- 开启报名丨AutoML-Zero:从零开始搜索机器学习算法
- 深拷贝的缺点_JavaScript 深拷贝
- 一份数据挖掘入门指南!!!
- markdown语法中的空格_Markdown语法简明教程
- IOS 设置文件是否使用ARC
- 1.5w字的Rmarkdown入门教程汇总
- 数据加密以及国密基础知识
- CH579 以太网转串口 串口服务器代码
- php 替换某个字符,php如何将指定字符串替换?
- 儒略日 Julian Date
- not all arguments converted during string formatting
- linux系统输入法进程怎么关闭,快速解决linux下中文输入法问题
- 提高数据存储效率的七个技巧
- 强收红包漫天要价偷转黑车……滴滴网约车被指太任性
- mysql 1032_mysql主从同步错误Last_SQL_Errno: 1032处理分析
- 在photoshop中,从1寸到24寸照片的大小是多少?
- 【MT4 Client API 服务器直连接口】接口介绍
- 事件营销有哪些策略?
- IDEA不显示git版本控制以及vcs的配置
- 云运维的启示与架构设计