api防止重复提交
2022-12-01阅读(432)
问:Springboot 使用AOP实现防止接口重复提交
- 答:在传统的web项目中,防止重复提交,通常做法是:后端生成一个唯一的提交令牌(uuid),并存储在服务端。页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。
思路没有问题,但是需要前后端都稍加改动,如果在业务开发完再加这个的话,改动量未免有些大了。无需前端配合,纯后端处理,是最清爽的。设计思路如下:
自定义注解@RreventReSubmit标记所有Controller中的提交请求。通过AOP 对所有标记@RreventReSubmit的方法拦截。在业务方法执行前,获取当前用户的 token(或者JSessionId)+ 当前请求地址,作为一个唯一 KEY,去获取 Redis 分布式锁(如果此时并发获取,只有一个线程会成功获取锁)。当有请求调用接口时,到redis中查找相应的key,如果能找到,则说明重复提交,如果找不到,则执行操作。业务方法执行后,释放锁。
切面类需要使用@Aspect和@Component这两个注解做标注。
在想要防止重复提交的接口上添加注解即可使用。
问:纯java的后台接口工程,怎么防止app客户端重复提交请求?
- 答:防表单重复提交:
前端控制,使用js将提交按钮变灰(不可二次点击)
web端的话使用session,生成一个token(随机产生的字符串)存入session,页面使用EL表达式获得,表单提交时将token也传入后台,对token进行判断。
数据库表加约束,比如唯一约束
问:手机浏览器里面文档出现dumrtcjsapi注册是什么意思
- 答:重复提交。浏览器本质就是一款软件,安装在操作系统之上,一般给用户提供浏览网页的服务,手机浏览器里面文档出现dumrtcjsapi注册是重复提交的意思,连续点击两次或多次,一般的网页设计为了避免重复提交,比如付款的时候,会有针对性的设计,避免用户进行多次确定操作。