点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

作者:CS打赢你

blog.csdn.net/weixin_42533856/article/details/82593123

说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考

一,技术要点:springboot的基本知识,redis基本操作,

首先是写一个注解类:

import java.lang.annotation.Retention;
import java.lang.annotation.Target;import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;@Retention(RUNTIME)
@Target(METHOD)
public @interface AccessLimit {int seconds();int maxCount();boolean needLogin()default true;
}

接着就是在Interceptor拦截器中实现:

import com.alibaba.fastjson.JSON;
import com.example.demo.action.AccessLimit;
import com.example.demo.redis.RedisService;
import com.example.demo.result.CodeMsg;
import com.example.demo.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;@Component
public class FangshuaInterceptor extends HandlerInterceptorAdapter {@Autowiredprivate RedisService redisService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//判断请求是否属于方法的请求if(handler instanceof HandlerMethod){HandlerMethod hm = (HandlerMethod) handler;//获取方法中的注解,看是否有该注解AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);if(accessLimit == null){return true;}int seconds = accessLimit.seconds();int maxCount = accessLimit.maxCount();boolean login = accessLimit.needLogin();String key = request.getRequestURI();//如果需要登录if(login){//获取登录的session进行判断//.....key+=""+"1";  //这里假设用户是1,项目中是动态获取的userId}//从redis中获取用户访问的次数AccessKey ak = AccessKey.withExpire(seconds);Integer count = redisService.get(ak,key,Integer.class);if(count == null){//第一次访问redisService.set(ak,key,1);}else if(count < maxCount){//加1redisService.incr(ak,key);}else{//超出访问次数render(response,CodeMsg.ACCESS_LIMIT_REACHED); //这里的CodeMsg是一个返回参数return false;}}return true;}private void render(HttpServletResponse response, CodeMsg cm)throws Exception {response.setContentType("application/json;charset=UTF-8");OutputStream out = response.getOutputStream();String str  = JSON.toJSONString(Result.error(cm));out.write(str.getBytes("UTF-8"));out.flush();out.close();}
}

再把Interceptor注册到springboot中

import com.example.demo.ExceptionHander.FangshuaInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {@Autowiredprivate FangshuaInterceptor interceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(interceptor);}
}

接着在Controller中加入注解

import com.example.demo.result.Result;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class FangshuaController {@AccessLimit(seconds=5, maxCount=5, needLogin=true)@RequestMapping("/fangshua")@ResponseBodypublic Result<String> fangshua(){return Result.success("请求成功");}

本文有参考其他视频的教学,希望可以帮助更多热爱it行业的人,

昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。

关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题解过程。很多人表示刷数据结构和算法题效率不高,甚是痛苦。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏了。

需要刷题笔记PDF文档的小伙伴可以直接长按扫码关注下方二维码,回复 「刷题笔记」 四个字自取:

关注下方公众号

????????????

回复关键字「刷题笔记」,即可下载

笔记版权归原作者所有,转载请注明出处 https://books.halfrost.com/leetcode/

一个注解搞定 SpringBoot 接口防刷,还有谁不会?相关推荐

  1. 一个注解搞定接口防刷!还有谁不会?

    点击关注公众号,Java干货及时送达 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考 一,技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: ...

  2. 后端技术:一个注解解决 SpringBoot 接口防刷

    说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考 技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java.lang.anno ...

  3. springboot接口防刷实现

    本文主要介绍一种通过实现自定义注解,实现一种比较通用的接口防刷方式 前言 1.基本准备 jdk 8 redis springboot 2.7.6 2.基本思路 主要就是借助 redis 来实现接口的防 ...

  4. 数据翻译的代码辅助插件,一个注解搞定,减少30%SQL代码量

    一.开源项目简介 Easy Trans是一款用于做数据翻译的代码辅助插件,利用MyBatis Plus/JPA/BeetlSQL 等ORM框架的能力自动查表,让开发者可以快速的把ID/字典码 翻译为前 ...

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

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

  6. Android线程创建aop,【android安卓】一个注解搞定线程切换,基于AOP的线程转换框架...

    最简单的使用方法: 模拟进度展示: @RunOnIOThread public void progress() { for (int i = 0; i <= 100; i++) { showPr ...

  7. springboot项目实例_Springboot项目的接口防刷的实例

    今天跟大家分享Springboot项目的接口防刷的实例的知识. 1 Springboot项目的接口防刷的实例 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考. 技术要点:spr ...

  8. springboot项目实例_Springboot项目的接口防刷(实例)

    来源:https://urlify.cn/ERf6Rr 说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考. 技术要点:springboot的基本知识,redis基本操作, 首先是 ...

  9. Java接口防刷策略(自定义注解实现)

    前言 本文一定要看完,前部分为逻辑说明及简单实现,文章最后有最终版解决方案(基于lua脚本),因为前部分是防君子不防小人,无法抵挡for循环调用. 目的 短信发送及短信验证码校验接口防刷 一方面防止用 ...

最新文章

  1. vb 取得计算机名及目录
  2. 微服务架构10条最佳实践
  3. 剁馅机器人图片_黄金手撕面包培训图片信得过的工艺利润高
  4. Android开发日常笔记
  5. 中石油训练赛 - 手机号码(简单分块+思维)
  6. 反应器组件 ACE_Reactor
  7. 高性能Javascript HTML集合访问的学习笔记
  8. java close wait过多_HttpClient当HTTP连接的时候出现大量CLOSE_WAIT连接
  9. OpenShift 4 - Istio-Tutorial (2) 部署三个微服务
  10. 实战Veeam Backup Replication 9.5 Upgrade to Veeam Backup Replication 10
  11. 短视频直播一对一源码“皇冠”花落谁家
  12. ST板块大幅下跌 不少ST股逆势上涨
  13. 【算法】skiplist——调表,一种随机化的类平衡二叉树
  14. 方便你我他,百科全书:)
  15. 联想T430 安装msata接口的SSD固态硬盘
  16. openstack创建云主机
  17. Excel格式报表生成 (POI技术)
  18. Android 上传文件,图片。以及服务器端接收相关。
  19. board/freescale/mx6ull_alientek_emmc/Kconfig:15: ‘endif‘ in different file than ‘if‘
  20. 西门子PLC-S7200smart--------------章节一modbus TCP通信

热门文章

  1. 2018-3-23论文一种新的群智能算法--狼群算法(框架结构+感想一点点)
  2. 从一个数组中寻找出现奇数次的数字
  3. bzoj 3339 莫队
  4. codevs1137 计算系数
  5. python 之socket 网络编程
  6. 从svn下载的Mavn项目,到本地后不识别(MyEcplise)
  7. Android之自定义AlertDialog无法监听控件
  8. poj1129Channel Allocation
  9. Python字符编码详解
  10. 刚开始Windows Mobile的开发,请大家多多关照