我们现在的防重复提交方法是 写的自定义注解+切面的方式来实现防重复提交 将请求路径和请求的token组成redis的key 然后存在redis里面,下次进来看这个key是否存在 我们设置的过期时间是1s。
现在出现了问题 ,我们注册的时候有个操作是会去请求第三方接口的操作,但是这个时候返回的比较慢,就可能超过了1s,然后前端还没返回过去,他又请求过来了,这个时候第一个请求第三方返回了 然后执行了下面的操作,结果导致生成了重复的数据,分布式项目没有采用session的方式来进行重复提交验证,
key校验成功了马上就可以删了吧,过期时间可以设长一点,保证不一直堆积在redis里就行
你可以先入库,存个中间状态
涉及第三方的,都得有个中间态。比如我上家公司的支付。
用户点击支付,变为支付中,等第三方回调回来,变为支付成功。
直接前端控制 后端没有返回不然操作不行吗
这也没啥办法,前端可以采用节流,按钮变灰等操作,避免重复提交;
服务端这边其实可以把固定设置超时时间,改成读取配置,这几个长耗时的接口,超时时间延长,
如果你自己的接口返回结果不依赖第三方接口返回结果的话,调用第三方接口可以用异步的方式,减少接口的响应时间
时间间隔长一点啊,重复提交1秒太短了
我们这默认的6秒,某些接口在自定义时长