SpringBoot 接口防刷

1:pom添加依赖

  <dependency><groupId>net.jodah</groupId><artifactId>expiringmap</artifactId><version>0.5.10</version></dependency>

2:封装工具

@Slf4j
public class RequestUtil {/*** 1)ExpirationPolicy.ACCESSED :每进行一次访问,过期时间就会自动清零,重新计算;* 2)ExpirationPolicy.CREATED:在过期时间内重新 put 值的话,过期时间会清理,重新计算;*/private final static ExpiringMap<String, String> EXP_TIME_MAP = ExpiringMap.builder()// 设置每个key有效时间5s, 如果key不设置过期时间,key永久有效.expiration(5, TimeUnit.SECONDS)// 允许更新过期时间值.variableExpiration()// CREATED: 只在put和replace方法重置过期时间.expirationPolicy(ExpirationPolicy.CREATED).build();/*** @param* @Description 判断在固定时间内是否重复请求* @Throws* @Return boolean* @Date 2024-03-04 17:26:38* @Author WangKun*/public static boolean isRepeatSubmitInterceptor(HttpServletRequest request, HttpServletResponse response) {//获取用户访问地址String uri = request.getRequestURI();String ip = IPUtil.getIpAddr(request);if (uri.equals(EXP_TIME_MAP.get(ip))) {return true;}EXP_TIME_MAP.put(ip, uri);return false;}}

3:调用(springboot拦截)

/*** @Description 拦截器* @Author WangKun* @Date 2023/3/6 10:16* @Version*/
@Slf4j
public class UrlInterceptor implements HandlerInterceptor {/*** @param request* @param response* @param handler* @Description 调用时间:Controller方法处理之前* 执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行* 若返回false,则中断执行,注意:不会进入afterCompletion* @Throws* @Return boolean* @Date 2023-04-21 10:19:32* @Author WangKun*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {//在这里调用return true;}/*** @param request* @param response* @param handler* @param ex* @Description 调用前提:preHandle返回true* 调用时间:DispatcherServlet进行视图的渲染之后* 多用于清理资源* @Throws* @Return void* @Date 2023-04-21 10:19:53* @Author WangKun*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {}}

拦截器配置

/*** @Description 拦截器配置* @Author WangKun* @Date 2023/3/6 10:33* @Version*/
@Configuration
public class WebInterceptorConfig implements WebMvcConfigurer {/*** @param registry* @Description 跨域* @Throws* @Return void* @Date 2023-04-21 10:34:12* @Author WangKun*/@Overridepublic void addCorsMappings(CorsRegistry registry) {//设置允许跨域的路径registry.addMapping("/**")//设置允许跨域请求的域名 2.0版本使用allowedOrigins 2.4版本以上使用allowedOriginPatterns.allowedOriginPatterns("*")//是否允许证书 不再默认开启.allowCredentials(true)//设置允许的方法.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE")// 所有请求头.allowedHeaders("*")//跨域允许时间.maxAge(3600);}/*** @param registry* @Description 拦截放行配置* @Throws* @Return void* @Date 2023-04-21 10:33:51* @Author WangKun*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加拦截器registry.addInterceptor(new UrlInterceptor())//拦截所有路径.addPathPatterns("/**");//放行路径,可以添加多个
//                .excludePathPatterns("/api/login");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型(LLM):每个专业人士的完美助手

「大语言模型&#xff08;LLM&#xff09;革命」&#xff1a;ChatGPT如何引领工作效率新篇章 在不断发展的技术领域&#xff0c;像 ChatGPT 这样的大型语言模型 (LLM) 已成为各行业专业人士不可或缺的工具。 这篇博文探讨了大语言模型&#xff08;LLM&#xff09;在专业环境中的…

GDPU Java 天码行空2

实验2 类与封装性 文章目录 实验2 类与封装性&#xff08;一&#xff09;实验目的&#xff08;二&#xff09;实验内容和步骤&#xff08;1&#xff09;建立学生类和测试类。学生类中有成员变量&#xff1a;姓名&#xff0c;年龄&#xff1b;成员方法&#xff1a;学习&#xff…

Java 8日期时间类LocalDate、LocalDateTime详解

Java 8日期时间类LocalDate、LocalDateTime详解 一、常见类型转换1.1 LocalDateTime 转 LocalDate1.2 LocalDateTime 转 Date1.3 LocalDate 转 LocalDateTime1.4 LocalDate 转 Date1.5 Date 转 LocalDateTime1.6 Date 转 LocalDate1.7 LocalDate 转 String1.8 String 转 LocalD…

程序逻辑控制

1.java的三大结构 可以说java的这三大结构包括其中的语句跟c语言上的基本上都是一样的。现在就当重新复习一遍吧&#xff01; 1.顺序结构 2.分支结构 if语句 跟c语言的语法一模一样。就直接看文案了。 switch语句 java中的switch语句跟c语言中的switch几乎相同&#xff0c;…

AtCoder Beginner Contest 343 A~F

A.Wrong Answer&#xff08;模拟&#xff09; 题意&#xff1a; 给你两个整数 A A A和 B B B&#xff0c;它们介于 0 0 0和 9 9 9之间。 输出任何一个介于 0 0 0和 9 9 9之间且不等于 A B AB AB的整数。 分析&#xff1a; 按题意判断并输出一个整数即可。 代码&#xff…

[力扣 Hot100]Day39 对称二叉树

题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 出处 思路 每一对对称的节点AB&#xff0c;A的左儿子和B的右儿子&#xff0c;A的右儿子和B的左儿子又是一对对称节点。 代码 class Solution { public:bool compare(TreeNode* r1, TreeNode* r2){i…

qnx display

05-SA8155 QNX Display框架及代码分析(1)_openwfd-CSDN博客 backlight p: 0 t: 0 00000 SHD -----ONLINE----- 2024/03/06 13:49:22.046 backlight p:1060958 t: 1 00000 ERR backlight_be[backlight_be.c:284]: pthread_create enter 2024/03/06 13…

python基础练习题目

1. 根据身高体重&#xff0c;判断人的胖瘦 描述&#xff1a; 通过身高和体重&#xff0c;判断一个人的胖瘦。国际上一般采用BMI体重指数&#xff0c;计算公式为BMI 体重 / 身高2(保留小数点后1位)&#xff0c;参考标准如下&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪…

回流和重绘

浏览器是如何进行页面渲染的&#xff1f; 1、解析&#xff08;parser&#xff09;HTML&#xff0c;生成DOM树&#xff1b; 2、同时解析css&#xff0c;生成样式规则&#xff1b; 3、根据DOM树和样式规则&#xff0c;生成渲染树&#xff1b; 4、进行布局Layout&#xff08;回流&…

SpringBoot集成RocketMQ

RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里参考Kafka特点研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目&#xff0c;具有高性能、高可靠、高实时、分布式特点。 环境搭…

对VisionPro的认识,CogPMAlingTool模板匹配工具练习

什么是VisionPro&#xff1f; 在认识VisionPro之前我们需要先熟悉一下图片的各种格式 这里我们可以参考来自githubcurry博主的文章 图片各种格式的区别以及计算机如何存储图片 VisionPro 是由世界领先的机器视觉公司 Cognex 开发的一款专业机器视觉软件。它提供了强大的图像…

【一】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

职工考勤20170320 职工考勤20170320数据库展示 职工考勤表展示 职务代码表展示 一、基本操作 代码方式&#xff1a; --第一大题、基本操作 ALTER TABLE [dbo].[职工考勤表] DROP COLUMN [照片];EXEC sp_rename dbo.职工考勤表.职工编号, 工号, COLUMN;ALTER TABLE 职工考勤表 A…

华为HQoS配置案例

HQoS基于层次化调度&#xff0c;cpe上支持三级队列&#xff1a; level3流队列&#xff1a;每个用户的同类业务是一个业务流&#xff0c;针对每个用户不同的业务流进行队列调度&#xff0c;流队列一般与业务类型对应&#xff08;EF、AF、BE等&#xff09;。 level2用户队列&…

2024年安卓开发者跳槽指南,音视频时代你还不会NDK开发

正式加入字节跳动&#xff0c;分享一点面试小经验 今天正式入职了字节跳动。工号超吉利&#xff0c;尾数是3个6。然后办公环境也很好&#xff0c;这边一栋楼都是办公区域。公司内部配备各种小零食、饮料&#xff0c;还有免费的咖啡。15楼还有健身房。而且公司包三餐来着。下午…

Java对象转JSON的三种方法

Java对象转JSON的三种方法 在Java编程中&#xff0c;我们经常需要将Java对象转换为JSON格式&#xff0c;以便于数据的传输和存储。本文将介绍三种常用的方法来实现Java对象到JSON的转换&#xff0c;分别是使用org.json.JSONObject&#xff0c;Google Gson和Jackson。 一、使用…

UnityAPI的学习——Rigidbody类

Rigidbody类的功能是用来模拟GameObject对象在现实世界中的物体特性&#xff0c;包括重力、阻力、质量、速度等 Rigidbody类实例属性 在Rigidbody类中&#xff0c;涉及的实例属性有collisionDetectionMode、drag、inertiaTensor、mass和velocity。 collisionDetectionMode属…

【YOLO v5 v7 v8 v9小目标改进】新CNN架构 InceptionNeXt:怎么让大卷积核既好用又快

新CNN架构 InceptionNeXt&#xff1a;怎么让大卷积核既好用又快 提出背景问题: 如何提高大核心卷积的效率&#xff0c;同时保持或提升模型性能&#xff1f; 改进思路MetaNeXtInception深度卷积InceptionNeXt 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 提出背…

进程之守护进程

目录 1、Linux进程的类型: 2、守护进程的特点: 3、守护进程的创建步骤 1、Linux进程的类型:</

RUUFFY、由利、希亦内衣洗衣机怎么样?测评对比谁更好?

我们传统的洗衣机其实并不可以用来清洗内衣裤&#xff0c;以及袜子这类小型的衣物&#xff0c;容易出现细菌的交叉感染&#xff0c;而且传统洗衣机单单清洗这些小件衣物并不划算&#xff0c;需要很多的水量&#xff0c;有些全自动的大型洗衣机需要更多的衣物同时清洗才能正常工…

110. 平衡二叉树【简单】

110. 平衡二叉树【简单】 题目描述&#xff1a; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;r…