今日推荐

减少 try-catch ,这样做才叫优雅!让人上瘾的新一代开发神器,彻底告别Controller、Service、Dao等方法SpringBoot实现人脸识别功能相信我,使用 Stream 真的可以让代码更优雅!全网最详细的线程池 ThreadPoolExecutor 解读!利用多线程批量拆分 List 导入数据库,效率杠杠的!

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 说明

https://github.com/apolloconfig/apollo/wiki/

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/news/112586

最后,给大家推荐一个我的知识星球,现在加入,前 100 名,只需要 25 元即可,非常优惠。

一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!相关推荐

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

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

  2. 一个依赖搞定Spring Boot 配置文件脱敏

    经常会遇到这样一种情况:项目的配置文件中总有一些敏感信息,比如数据源的url.用户名.密码....这些信息一旦被暴露那么整个数据库都将会被泄漏,那么如何将这些配置隐藏呢? 今天介绍一种方案,让你在无感 ...

  3. Java后端:一个注解搞定 Spring Boot 日志!

    此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 bean ...

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

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

  5. Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

    有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道gblfy说的是对的了! 文章目录 一.背景 二.分析思路 三.实战 1. 创建工程 2. pom.xml 3 ...

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

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

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

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

  8. SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!

    作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 上一篇:推荐10个你不得不关注的NB技术公众号 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你 ...

  9. git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...

    最近有幸试用了一下阿里云的一个新产品:云开发平台,体验一把全新的开发模式!虽然中间也碰到了一些问题,但整体的体验透露着未来感,因为整个过程都不需要使用我们最常用的IDEA,仅依靠浏览器就把一个Spri ...

最新文章

  1. python爬虫正则表达式实例-使用正则表达式进行页面提取
  2. 5月22日阿里云网络变更公告
  3. SpringBoot源码笔记分析
  4. BZOJ2240 : ural1676 Mortal Combat
  5. ASP.NET Core 沉思录 - Logging 的两种介入方法
  6. python关于包的题怎么做_Python自定义包引入
  7. Tensorflow线程队列与IO操作
  8. 知识图谱入门2-1:实践——基于医疗知识图谱的问答系统
  9. 无穷级数求和7个公式_高中数学:教你等差数列求和公式,有这7种方法
  10. LR 类分析方法总结
  11. 同表父子关系 的SQL查询语句的写法
  12. QT报错 error: [debug/qrc_image.cpp] Error 1
  13. C#个人博客系统源码(前台+后台管理)
  14. Swift——自定义转场动画(一)
  15. 2021年华数杯数学建模A题电动汽车无线充电优化匹配研究求解全过程文档及程序
  16. Android关于Firebase集成及示例及用法(开发反编译)
  17. Hibernate快速入门(2)
  18. 百度正式启动凤巢系统 开创百度搜索广告技术新纪元
  19. 数据中心配电系统4P开关的应用误区
  20. python就业前景不好_Python就业前景好不好?学Python好找工作吗?【附资料全家桶—网络爬虫入门到实践】...

热门文章

  1. 传统机器学习笔记6——回归树模型
  2. 酷瓜云课堂(腾讯云版)v1.2.8 发布,开源在线教育解决方案
  3. Mycat读写分离失败(一主一从)尝试解决
  4. 三菱R系列PLC与西门子200Smart简单CPU通讯通讯
  5. 第四篇、vue组件生命周期 beforeDestroy()和destroyed()
  6. android 网页无法打开,Android浏览器无法打开网页
  7. 深度学习面试题:怎么减少卷积层的参数数量?
  8. android 全屏动画_如何创建全屏视频开幕动画
  9. 比例—微分控制调节二阶系统
  10. vscode快捷键-mac