小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
本节介绍RuoYi-Vue
的ruoyi-admin
模块中的上传下载模块SysConfigController
部分的代码,这个接口主要用来展示系统参数模块的情况。这个模块就是普通的增删改查,其中比较有意思的是防止重复提交的这个注解。
RepeatSubmit 注解
日常开发中我们经常会遇到前端多次请求同一个接口的问题,比如前端没有做遮罩层,用户点击了多次按钮。全指望着用户来等待也并不靠谱,如果各个接口自己进行防止重复提交的逻辑又显得不是十分优雅了,所以,我们就将对应的逻辑抽出来形成一个注解,方便我们的使用。
1 | java复制代码package com.ruoyi.common.annotation; |
通过这块的代码历史,我们可以看到间隔时间和提示消息都是后加的,定义这两个参数有助于我们定制各个接口不同的重复提交的逻辑,有的接口耗时就是很长,就需要将间隔时间定的长一些,有的接口需要的提示消息需要修改,我们也可以通过这个message来进行自主定义。
具体实现方法
首先我们定义了一个抽象类RepeatSubmitInterceptor
,对preHandle
方法进行了定义,判断方法上是否存在RepeatSubmit
注解
1 | java复制代码 |
需要注意到这里的
1 | java复制代码 ServletUtils.renderString |
直接将提示信息放入response中返回了。
在子类中我们要实现对应的父类中的isRepeatSubmit
方法
1 | java复制代码package com.ruoyi.framework.interceptor.impl; |
这里面比较有意思的是
1 | java复制代码// 唯一值(没有消息头则使用请求地址) |
这是后面进行的优化,为什么要进行这个操作呢,我觉得原因是有的时候并不是所有的请求都有token,这个时候如果我们不对对应的url进行拦截的话,那么他们就可以在未登录的情况下对某些无需登录却十分耗时的页面进行多次请求,而如果对url也进行了拦截,就不会有这个问题了。可以对这个url的访问次数进行限制了。
拦截规则需要注册
1 | java复制代码@Configuration |
本文转载自: 掘金