责编:乐乐

链接: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 反爬虫,防止接口盗刷!相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 使用adb devices命令无法识别夜神模拟器的解决方法
  2. Linux 下 LaTeX 2018 安装与使用
  3. 互联网协议第六版部署提速 阿里专家详解全套安全解决方案
  4. matlab 数字转化为文字,将文本转换为数值 - MATLAB Simulink - MathWorks 中国
  5. python桌面图标被删了_Python实现图标锁定到Windows任务栏或删除图标
  6. java推送技术_java网络编程 - java服务器推送技术系列方案实战
  7. php 扩展包是什么意思,大家知道扩展用户组是什么意思么??
  8. 二十六个月Android学习工作总结
  9. 查看mysql本地路径
  10. android魅族进度条,魅族基于安卓 10 的首个 Flyme 内测版已推送:16s Pro/16s 尝鲜,可强制开启 90Hz 刷新率...
  11. TypeError: __init__() got an unexpected keyword argument ‘任意数‘的原因及解决办法
  12. iPad Air/Air2/iPhone6 Plus跑分对比
  13. django自动转化前端模板中static的css,js引用
  14. VB.Net工作笔记001---用ASP调用VB.NET编写的dll_ClassLibrary
  15. 令人激动!谷歌推强化学习新框架「多巴胺」,基于TensorFlow,已开源丨附github...
  16. 洛谷3067 BZOJ 2679题解(折半搜索)
  17. C、C++实现 -- 字符串分割函数split
  18. linux指令格式介绍
  19. java来电报名字的软件_读短信来电报姓名最新版
  20. 多智能体深度强化学习——MADDPG算法代码分析(tensorflow)

热门文章

  1. 「镁客·请讲」快仓杨威:赋予仓库灵魂,让智能仓库系统自我进化和迭代
  2. 物联网正在给批发业带来新的商业模式
  3. 抓包分析TCP的三次握手和四次分手
  4. hdu2846(2009多校第四场) 字典树
  5. What is Gameplay
  6. 最简易的JQUERY折叠菜单 有预览效果
  7. 如何使用SMTPDiag 工具
  8. SpringMVC启动后自动执行
  9. golang 写入文件 覆盖旧文件 将旧文件清空
  10. centos7 locale 区域语言设置