接口重复提交问题
2023-01-09阅读(576)
问:数据接口怎么避免重复提交的问题
- 答:你是否遇到过重复提交的问题?要解决这个问题其实并不难。这里有一个简单的方法避免同一表单的重复提交。 首先,我们可以定义一个session变量用来保存一个表单的提交序列号。这里我定义为$userLastAction。然后在表单里加入一个hidden变量
问:Springboot 使用AOP实现防止接口重复提交
- 答:在传统的web项目中,防止重复提交,通常做法是:后端生成一个唯一的提交令牌(uuid),并存储在服务端。页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。
思路没有问题,但是需要前后端都稍加改动,如果在业务开发完再加这个的话,改动量未免有些大了。无需前端配合,纯后端处理,是最清爽的。设计思路如下:
自定义注解@RreventReSubmit标记所有Controller中的提交请求。通过AOP 对所有标记@RreventReSubmit的方法拦截。在业务方法执行前,获取当前用户的 token(或者JSessionId)+ 当前请求地址,作为一个唯一 KEY,去获取 Redis 分布式锁(如果此时并发获取,只有一个线程会成功获取锁)。当有请求调用接口时,到redis中查找相应的key,如果能找到,则说明重复提交,如果找不到,则执行操作。业务方法执行后,释放锁。
切面类需要使用@Aspect和@Component这两个注解做标注。
在想要防止重复提交的接口上添加注解即可使用。
问:java后台接口 怎么防止重复提交
- 答:既然是接口,就要考虑破坏性访问,考虑情况有很多,我个人用真实IP+访问action路径+XX 组成锁,直到该次动作结束,这锁才打开
- 答:设置一个flag标志,判断它的值就行啊