我们的目的是在指定时间内,每个用户只能进行秒杀请求指定次数。

首先,定义一个注解

写一个拦截器。就是当执行某个方法之前,将请求截获:

(这里实现的只是一个思路,由于StringRedisTemplate只能存字符串,不好递增,因此只是在指定时间内都只能访问一次,无论你指定多少 次,懂得思路就行)

这里可能出现的错误:解决方案。

将拦截器注册到系统中,也即是Springboot的配置文件中,由于SpringBoot使用的是默认配置。我们可以创建一个类来增加或者覆盖相应的配置。

效果:连续刷页面,会出现

说明限流成功。


拓展一下:压力测试,这里使用Apache ab来进行压测。

到网上下载包,解压。打开DOS窗口,进入解压目录的bin文件夹下,假设输入以下命令行:

ab -n 100000 -c 1000 http://127.0.0.1:8080/sell/skill/order/123456

注:1000个用户同时发送100000个并发请求。


自定义注解 的注解

1)@Target

java.lang.annotation.Target

用于设定注解使用范围

java.lang.annotation.ElementType

Target通过ElementType来指定注解可使用范围的枚举集合

2)@Retention

注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE
生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。
那怎么来选择合适的注解生命周期呢?
首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。
一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解
如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;
如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。

注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法的名字出错时,编译器就会报错
注解@Deprecated,用来表示某个类或属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰
注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候

自定义注解和拦截器,实现接口限流防刷相关推荐

  1. 十七、安全优化(拦截器实现接口限流防刷)

    接口限流防刷 防止用户大量重复访问,一分钟之内或几秒钟内限制访问多少次 思路:对接口做限流,计时,并记录访问次数 将一个用户的访问次数写到缓存里,同时给数据加有效期,次数增加直接对数据+1 如果在有效 ...

  2. java 接口防刷_java轻量级接口限流/防刷插件

    简介 call-limit提供接口限流.防刷的功能,插件基于spring开发,在应用应用的任何一个逻辑层皆可使用(web.service.dao), 插件支持单机应用下的限流和分布式应用的限流(分布式 ...

  3. spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例...

    本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...

  4. 自定义注解在拦截器中为空_如何在Android中为特定联系人设置自定义铃声

    自定义注解在拦截器中为空 Everyone likes to know who's calling before they actually pick up the phone, and the ea ...

  5. Java自定义注解-请求限流/防刷

    兄弟们,相信遇到过重复请求的痛点吧,我也遇过,因此,写了一个自定义注解去解决这个问题,接下来看代码. 首先:创建一个自定义注解 RequestLimit .然后字段的话是 second.maxCoun ...

  6. nginx限流防刷方案

    前言   互联网发展已经进入了存量期,一开始低廉的获客成本已经不复存在,互联网公司通过付出诱人而高昂的补贴以此来拉新的方式,催生了大量的黑产,灰产.并且越来越多的公司爆出数据泄露,暗网上用户的密码和隐 ...

  7. 高并发处理之接口限流

    最近开发的抢购活动上线后发现了两个比较明显的问题,其一:活动一开始,接口访问量剧增:其二:黑名单中增加了一大批黑名单用户(或者说IP),这其中就包含了一些恶意用户或机器人刷接口. 针对一些高并发的接口 ...

  8. redis 判断存在性_springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    提醒:后面有些图片模糊,请点击原文查看清晰图片 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同 ...

  9. 自定义注解实现拦截sql,并在sql中增加相应的条件

    功能介绍 先说下这期实现的这个功能. 其实看起来很简单的一个功能. 原sql:select * from users WHERE username = ? 增加自定义注解后: 变成这样: SELECT ...

最新文章

  1. 关于MySQL redo log,挖些坑,慢慢填
  2. Object处理方法的返回值
  3. 利用pip3 install --upgrade批量更新已过期的python库
  4. 关于tesseract 出错信息:read_params_file: Can't open chi_sim
  5. 启明云端分享|sigmastar SSW101B WiFi 非信令测试说明
  6. [QGLViewer]3D场景鼠标点击位置
  7. 【蓝桥杯单片机】超声波模块(测距原理,驱动方式)
  8. 将一个list转化成一颗树的输出方法
  9. Linux下mySQL数据库斥地手艺-1
  10. C基础(41——45)
  11. 黄金价格查询易语言代码
  12. SMing:2022年中青杯A题思路
  13. A problem occurred starting process 'command 'xxx
  14. 当AI遇上元宇宙:智能科技如何助力虚拟世界的发展?
  15. PCB与设备外壳接地问题
  16. 自媒体视频去水印工具哪个好
  17. 【YoLov5实战】记录一次不太成功的实战,足球场人物识别
  18. 【胖张】献给跟我一样的菜鸟
  19. Haru Free PDF Library——生成PDF的库
  20. Discrete Maths Answer

热门文章

  1. USACO1.1Broken Necklace[环状DP作死]
  2. KindEditorckplayer的简单结合
  3. 函数学习-delattr()
  4. tomcat源码之架构解析
  5. 4月3日 尤金.卡巴斯基在北大精彩演讲
  6. Open Source Bing Maps API for ASP.NET MVC
  7. 是什么狙杀了ERP实施成功?
  8. 用PQ的Windows版完成分区的一些调整工作
  9. Matlab非线性方程求解
  10. linux命令之添加系统搜索动态库目录-ldconfig