Java 后台防重复提交一般怎么做的?

2020 年 6 月 11 日
 luxinfl

我们现阶段就是加了一个张表,订单号唯一主键。请求过来的时候会校验数据库有没有这条单号数据,这个方法是非事务的。还有没有什么其他好的方法了。

我在想要不要放在 redis 里面。。求大佬指教啊

13734 次点击
所在节点    Java
74 条回复
Wuxj
2020 年 6 月 12 日
跳转到下单页的时候,将一些唯一性参数先传到后端生成唯一性 requestId,通过后端跳转到下单页,将生成的 requestId 放隐藏字段。提交订单的时候,根据 requestId 生成分布式锁。刚毕业那会做的,好像也没啥问题~仅供参考
TomatoYuyuko
2020 年 6 月 12 日
扔前端做啊,哪有前端不做设置的
sola97
2020 年 6 月 12 日
虽然我不懂,但前端处理防不了各种爬虫、脚本、秒杀软件吧
zhupeng163
2020 年 6 月 12 日
定义一个环绕增强的切面,切需要防重提交的 controller 甚至所有 controller,类名+方法名+所有参数拼接起来作为 key,用 redis setNx,给一个失效时间,setNx 返回 false 则抛重复提交异常。
1107139144
2020 年 6 月 12 日
请求加锁
wanguorui123
2020 年 6 月 12 日
用户锁+业务判断
pythonee
2020 年 6 月 12 日
csrf+1
不过数据库的设计也有必要
pythonee
2020 年 6 月 12 日
@guoyuchuan 尽量避免百度哦
guoyuchuan
2020 年 6 月 12 日
@pythonee #68
那就谷歌
ningyu1
2020 年 6 月 12 日
csrf+1
ningyu1
2020 年 6 月 12 日
csrf 能控制一部分重复提交(同一个页面多次点击 button 提交), 另外一部分是相同的业务参数重复提交(刷新页面获取新的 csrftoken 但是提交请求的其他参数不变,多用在录制回放),这个还要配合后端的幂等控制,做法有很多,可以排序后 md5 放到 redis 中去验证是否存在,也可以使用临时表控制幂等。
BlackBerry999
2020 年 6 月 12 日
前端做防抖节流
wc951
2020 年 6 月 13 日
前端是为了用户体验,后端是为了业务安全,都要做防重放的
reeco
2020 年 6 月 14 日
分布式悲观锁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/680607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX