项目实战第四十二讲:分布式环境下,使用ResubmitCheck注解进行防重校验
文章目录
1、背景:线上问题,用户重复提交导致服务端报错
大致的场景是这样的,如下图所示:
- 原因:接口在短时间内被连续调用,导致保存时违反了唯一约束,返回错误。许莉娇 在 15:01:53连续点击了两次费用保存按钮,第一次保存已经成功了,第二次费用重复无法再保存了,所以报错。
- 解决方法:为了防止重复提交,通常做法是:后端生成唯一的提交令牌(uuid),存储在服务端,页面在发起请求时,携带次令牌,后端验证请求后删除令牌,保证请求的唯一性。但是,上诉的做法是需要前后端都需要进行配合,而且不能防止当前请求还没有执行完成,继续点击的场景。
2、解决方案
通过前、后端分别拦截的方式来解决数据重复提交的问题。
2.1、前端拦截
前端拦截是指通过 HTML 页面来拦截重复请求,比如在用户点击完“提交”按钮后,我们可以把按钮设置为不可用或者隐藏状态。
执行效果如下图所示: