Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
责编:乐乐
链接:oschina.net/news/112586/kk-anti-reptile-released
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.project
groupId>
kk-anti-reptile
artifactId>
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;
注意
apollo-client 需启用 bootstrap
使用 apollo 配置中心的用户,由于组件内部用到 @ConditionalOnProperty,要在 application.properties/bootstrap.properties 中加入如下样例配置,(apollo-client 需要 0.10.0 及以上版本)详见 apollo bootstrap 说明
apollo.bootstrap.enabled = true
需要有 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 为前缀,如下为所有配置项及说明:
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:反爬虫防盗刷 Spring Boot 组件 kk-anti-reptile 初版发布
本文地址:https://www.oschina.net/news/112586/kk-anti-reptile-released
Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!相关推荐
- 一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
今日推荐 减少 try-catch ,这样做才叫优雅!让人上瘾的新一代开发神器,彻底告别Controller.Service.Dao等方法SpringBoot实现人脸识别功能相信我,使用 Stream ...
- Java后端:一个注解搞定 Spring Boot 日志!
此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 bean ...
- 一个依赖搞定Spring Boot 配置文件脱敏
经常会遇到这样一种情况:项目的配置文件中总有一些敏感信息,比如数据源的url.用户名.密码....这些信息一旦被暴露那么整个数据库都将会被泄漏,那么如何将这些配置隐藏呢? 今天介绍一种方案,让你在无感 ...
- Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道gblfy说的是对的了! 文章目录 一.背景 二.分析思路 三.实战 1. 创建工程 2. pom.xml 3 ...
- 一个依赖解决 Spring Boot 反爬虫,防止接口盗刷
kk-anti-reptile 是适用于基于spring-boot开发的分布式系统的反爬虫组件 系统要求 基于 spring-boot 开发 (spring-boot1.x, spring-boot2 ...
- SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!
作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 上一篇:推荐10个你不得不关注的NB技术公众号 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你 ...
- git上托管的代码如何部署在阿里云上_居然仅用浏览器搞定Spring Boot应用的开发与部署...
最近有幸试用了一下阿里云的一个新产品:云开发平台,体验一把全新的开发模式!虽然中间也碰到了一些问题,但整体的体验透露着未来感,因为整个过程都不需要使用我们最常用的IDEA,仅依靠浏览器就把一个Spri ...
- Spring Boot反爬虫,防止接口盗刷
做电商网站的时候,总有竞争对手利用爬虫来爬你的数据.如果你没有反爬虫措施,网站都可能被爬垮.好在阿里云现在有一些基础服务,可以帮你反爬虫,但是费用太贵.作为程序员,我们还是希望自己动手解决它! 我通过 ...
- kk-anti-reptile——Spring Boot 反爬虫,防止接口盗刷
概述 kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的开源反爬虫接口防刷组件. 开源地址 https://gitee.com/kekingcn/kk-anti- ...
最新文章
- 使用adb devices命令无法识别夜神模拟器的解决方法
- Linux 下 LaTeX 2018 安装与使用
- 互联网协议第六版部署提速 阿里专家详解全套安全解决方案
- matlab 数字转化为文字,将文本转换为数值
- MATLAB Simulink
- MathWorks 中国
- python桌面图标被删了_Python实现图标锁定到Windows任务栏或删除图标
- java推送技术_java网络编程 - java服务器推送技术系列方案实战
- php 扩展包是什么意思,大家知道扩展用户组是什么意思么??
- 二十六个月Android学习工作总结
- 查看mysql本地路径
- android魅族进度条,魅族基于安卓 10 的首个 Flyme 内测版已推送:16s Pro/16s 尝鲜,可强制开启 90Hz 刷新率...
- TypeError: __init__() got an unexpected keyword argument ‘任意数‘的原因及解决办法
- iPad Air/Air2/iPhone6 Plus跑分对比
- django自动转化前端模板中static的css,js引用
- VB.Net工作笔记001---用ASP调用VB.NET编写的dll_ClassLibrary
- 令人激动!谷歌推强化学习新框架「多巴胺」,基于TensorFlow,已开源丨附github...
- 洛谷3067 BZOJ 2679题解(折半搜索)
- C、C++实现 -- 字符串分割函数split
- linux指令格式介绍
- java来电报名字的软件_读短信来电报姓名最新版
- 多智能体深度强化学习——MADDPG算法代码分析(tensorflow)