发布时间:2023-06-06 13:00
在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例如:用户鼠标点击过快而重复保存,从而创建了2笔一模一样的单据。针对类似情况,我们就可以全局地控制接口不允许重复提交。
创建拦截器 RepeatSubmitInterceptor
@Component
public class RepeatSubmitInterceptor extends HandlerInterceptorAdapter {
@Autowired
private StringRedisTemplate stringRedisTemplate;
//防重时间间隔(秒)
private final int duration = 1;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getDispatcherType() == DispatcherType.ERROR){
return true;
}
String token = request.getHeader("token");
String lockKey = "RepeatSubmit:" + token + ":" + request.getServletPath();
Boolean result = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, "", duration, TimeUnit.SECONDS);
if (!result){
throw new Exception("请勿重复提交");
}
return true;
}
}
注入拦截器
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Autowired
private RepeatSubmitInterceptor repeatSubmitInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(repeatSubmitInterceptor);
}
}
建个 controller 并创建个简单的测试接口,打开 postman 快速点击2次请求,结果如下:
这边只是提供一种简单的方案,还可以有其他扩展,例如:
LSTM时间序列预测:圆圈搜索算法(Circle Search Algorithm,CSA)优化LSTM权值和阈值(提供MATLAB代码)
特斯拉又被挖墙脚:Autopilot总监离职,加入苹果造车团队
微信小程序:独家微信社群人脉小程序源码带后端控制源码完整版端控带简单教程
在同一台服务器中,同时安装mysql5.7和mysql8两个数据库
cocos draw call 优化,内存优化,网络优化,宽高适配,包体优化
pandas 作图 统计_绘图和可视化 Matplotlib,Pandas,Sseaborn, Pyecharts(数据蛙视频课摘录)...
密歇根大学联合谷歌大脑提出,通过「推断语义布局」实现「文本到图像合成」
Java 微服务框架对比:Dubbo 和 Spring Cloud