本文章只说一些简单的思路
打开表单之前先请求后端获取token,后端生成token,可以使用用户名+uuid的方式,并将token放入redis中,key和value都一样就可以,或者value随意写(value不重要),用户填写完表单后进行提交,token的校验以及删除可以写在过滤器或拦截器中,具体的思路如下:要实现一个token在服务端只能使用一次,当用户的请求过来的时候,先判断redis是否存在token,存在则删除token,这个判断删除的过程必须确保原子性,可以写lua脚本交给redis执行,试着想象以下这种情况,表单提交了两次,两次的token一致,一个token进入redis进行判断后还未来得及删除,另一个token恰好也判断成功,此时将会出现重复提交,如果redis不存在token,返回表单重复提交的信息,然后,前端需要在请求结束后对请求结果进行判断,如果请求成功或者后端返回表单重复提交的信息,前端什么都不做,如果请求失败返回其他的信息(可能是后端的参数检验),前端需要再次获取token,让用户可以再次提交表单完成表单的正常保存。
只是自己的一些想法,欢迎讨论
表单重复提交的解决办法
最新推荐文章于 2021-06-21 16:44:02 发布