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开发的分布式系统,遇到爬虫、接口盗刷怎么办?相关推荐

  1. 基于SpringCloud开发rabbitmq五种工作模式实现

    工作模式 1. RabbitMQ消息模型 2. SpringAMQP 2.1. Basic Queue 简单队列模型 2.1.1.消息发送 2.1.2.消息接收 2.1.3.测试 2.2. WorkQ ...

  2. bootstrap table传回的数据后端怎么获取_基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办

    kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件. 一.系统要求 基于spring-boot开发(spring-boot1.x, spring-boot2 ...

  3. 基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | oschina.net/p/kk-anti-reptil ...

  4. Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

    责编:乐乐 链接:oschina.net/news/112586/kk-anti-reptile-released kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系 ...

  5. 遇到爬虫、接口盗刷怎么办?反爬虫组件来助你

    长按识别下方二维码,即可"关注"公众号 每天早晨,干货准时奉上! 本文来源:oschina.net/p/kk-anti-reptile kk-anti-reptile是,适用于基于 ...

  6. Spring Boot反爬虫,防止接口盗刷

    做电商网站的时候,总有竞争对手利用爬虫来爬你的数据.如果你没有反爬虫措施,网站都可能被爬垮.好在阿里云现在有一些基础服务,可以帮你反爬虫,但是费用太贵.作为程序员,我们还是希望自己动手解决它! 我通过 ...

  7. 一个依赖解决 Spring Boot 反爬虫,防止接口盗刷

    kk-anti-reptile 是适用于基于spring-boot开发的分布式系统的反爬虫组件 系统要求 基于 spring-boot 开发 (spring-boot1.x, spring-boot2 ...

  8. kk-anti-reptile——Spring Boot 反爬虫,防止接口盗刷

    概述 kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的开源反爬虫接口防刷组件. 开源地址 https://gitee.com/kekingcn/kk-anti- ...

  9. 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!

    今日推荐 减少 try-catch ,这样做才叫优雅!让人上瘾的新一代开发神器,彻底告别Controller.Service.Dao等方法SpringBoot实现人脸识别功能相信我,使用 Stream ...

  10. 基于ITOP4412开发板的实时视频监控系统实现

    实时视频监控系统实现 设计一种RTMP嵌入式监控系统,该系统基于服务器/客户端模式,用户使用PC机或者使用移动设备通过网络实时监控观测对象.系统基于ITOP4412开发板,通过V4L2接口从摄像头采集 ...

最新文章

  1. 开启报名丨AutoML-Zero:从零开始搜索机器学习算法
  2. 深拷贝的缺点_JavaScript 深拷贝
  3. 一份数据挖掘入门指南!!!
  4. markdown语法中的空格_Markdown语法简明教程
  5. IOS 设置文件是否使用ARC
  6. 1.5w字的Rmarkdown入门教程汇总
  7. 数据加密以及国密基础知识
  8. CH579 以太网转串口 串口服务器代码
  9. php 替换某个字符,php如何将指定字符串替换?
  10. 儒略日 Julian Date
  11. not all arguments converted during string formatting
  12. linux系统输入法进程怎么关闭,快速解决linux下中文输入法问题
  13. 提高数据存储效率的七个技巧
  14. 强收红包漫天要价偷转黑车……滴滴网约车被指太任性
  15. mysql 1032_mysql主从同步错误Last_SQL_Errno: 1032处理分析
  16. 在photoshop中,从1寸到24寸照片的大小是多少?
  17. 【MT4 Client API 服务器直连接口】接口介绍
  18. 事件营销有哪些策略?
  19. IDEA不显示git版本控制以及vcs的配置
  20. 云运维的启示与架构设计

热门文章

  1. 安装 Redis的Python客户端redis-py
  2. centos6.5下iscsi多路径配置
  3. Windows 2008-TS测试-TS GateWay
  4. CacheCloud运维管理平台学习笔记
  5. 《图解HTTP》54~72Page 返回的HTTP状态码 与HTTP协作的Web服务器
  6. 使用ReactiveCocoa实现iOS平台响应式编程
  7. 程序员为什么要使用Markdown
  8. Illustrator中文版教程,如何在 Illustrator 中创建几何图案?
  9. 苹果Mac电脑硬件温度监测工具:TG Pro
  10. 文件隐藏工具Funter for Mac使用方法