博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防止重复提交订单,三种常用方案
阅读量:4570 次
发布时间:2019-06-08

本文共 1020 字,大约阅读时间需要 3 分钟。

在平时的开发中我们都需要处理重复提交的问题,避免业务出错或者产生脏数据,虽然可以通过前端控制但这并不是可以完全避免,最好的方式还是前后端均进行控制,这样的话就可以更有效,尽可能全面的去减少错误的发生。如果用户频繁点击或者恶意攻击的话就会造成不断的请求对服务器产生很大的压力,为了避免这种情况我们需要做处理。怎样解决?工作中用过的方案有三种:1.js层面,在用户点击提交订单后禁用按钮,然而这个是治标不治本的;2.我们可以使用Redis incrde 原子性递增,来解决这种高并发的秒杀或者分布式序列号生成等场景。鉴于本场景我们只用他来做计数实现间隔时间内只接收一次请求。实现逻辑:在提交订单之后使用Redis的incr设置一个递增的KEY(根据自己的需要设定但是要保证每一个人的唯一),来判断该KEY的数值,如果等于1说明这是第一次请求,发送短信记录日志,并设置有效期,如果不等于的话说明是间隔时间内多次请求,就提示请求频繁,稍后重试。String orderNum=memberId+productId;long count = redisTemplate.opsForValue().increment(orderNum, 1);if (count == 1) {//设置有效期2秒  redisTemplate.expire(orderNum, 2, TimeUnit.SECONDS);}if (count > 1) {   resultMap.put("retCode", "500");        resultMap.put("retMsg", "请不要重复提交订单");   return resultMap;}3.token机制解决1.客户端申请token2.服务器端生成token,并存放在session中,同时将token发送到客户端3.客户端存储token,在请求提交时,同时发送token信息4.服务器端统一拦截同一个用户的所有请求,验证当前请求是否需要被验证(不是所有请求都验证重复提交)5.验证session中token是否和用户请求中的token一致,如果一致则放行6.session清除会话中的token,为下一次的token生成作准备7.并发重复请求到来,验证token和请求token不一致,请求被拒绝

 

转载于:https://www.cnblogs.com/tinyj/p/9837114.html

你可能感兴趣的文章
电脑装windows与Centos双系统时引导问题
查看>>
从IL认识关键字(二)
查看>>
Sublime Text 3搭建Python开发环境
查看>>
es修改索引副本个数
查看>>
Oracle to_char格式化函数
查看>>
进店买衣服(for循环)
查看>>
spring-mvc 框架的简单搭建
查看>>
SpringBoot(二)-- 支持JSP
查看>>
vijos1776:关押罪犯
查看>>
坐标转换
查看>>
[YTU]_2918( Shape系列-4)
查看>>
LeetCode sort-list
查看>>
结构化编程 —— 顺序、分支(选择)、循环
查看>>
Python 辨异 —— __init__ 与 __new__
查看>>
算法 Tricks(六)—— 判断一个数是否为完全平方数
查看>>
数组适配器的简单配置
查看>>
WEB UI基础八:链接跳转到标准的工单界面
查看>>
ExtJS动态设置表头
查看>>
深度(Depth)概念
查看>>
linux - camera capture
查看>>