Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
sts网站
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liyang
sts网站
Commits
26f0737c
Commit
26f0737c
authored
Sep 20, 2021
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
防重提交注解支持配置间隔时间/提示消息
parent
ac942428
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
17 additions
and
20 deletions
+17
-20
RepeatSubmit.java
...c/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
+8
-0
RepeatSubmitInterceptor.java
.../ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
+3
-3
SameUrlDataInterceptor.java
...yi/framework/interceptor/impl/SameUrlDataInterceptor.java
+6
-17
No files found.
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
View file @
26f0737c
...
...
@@ -19,5 +19,13 @@ import java.lang.annotation.Target;
@Documented
public
@interface
RepeatSubmit
{
/**
* 间隔时间(ms),小于此时间视为重复提交
*/
public
int
interval
()
default
5000
;
/**
* 提示消息
*/
public
String
message
()
default
"不允许重复提交,请稍后再试"
;
}
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java
View file @
26f0737c
...
...
@@ -29,9 +29,9 @@ public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter
RepeatSubmit
annotation
=
method
.
getAnnotation
(
RepeatSubmit
.
class
);
if
(
annotation
!=
null
)
{
if
(
this
.
isRepeatSubmit
(
request
))
if
(
this
.
isRepeatSubmit
(
request
,
annotation
))
{
AjaxResult
ajaxResult
=
AjaxResult
.
error
(
"不允许重复提交,请稍后再试"
);
AjaxResult
ajaxResult
=
AjaxResult
.
error
(
annotation
.
message
()
);
ServletUtils
.
renderString
(
response
,
JSONObject
.
toJSONString
(
ajaxResult
));
return
false
;
}
...
...
@@ -51,5 +51,5 @@ public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter
* @return
* @throws Exception
*/
public
abstract
boolean
isRepeatSubmit
(
HttpServletRequest
request
);
public
abstract
boolean
isRepeatSubmit
(
HttpServletRequest
request
,
RepeatSubmit
annotation
);
}
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
View file @
26f0737c
...
...
@@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
com.alibaba.fastjson.JSONObject
;
import
com.ruoyi.common.annotation.RepeatSubmit
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.core.redis.RedisCache
;
import
com.ruoyi.common.filter.RepeatedlyRequestWrapper
;
...
...
@@ -35,21 +36,9 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
@Autowired
private
RedisCache
redisCache
;
/**
* 间隔时间,单位:秒 默认10秒
*
* 两次相同参数的请求,如果间隔时间大于该参数,系统不会认定为重复提交的数据
*/
private
int
intervalTime
=
10
;
public
void
setIntervalTime
(
int
intervalTime
)
{
this
.
intervalTime
=
intervalTime
;
}
@SuppressWarnings
(
"unchecked"
)
@Override
public
boolean
isRepeatSubmit
(
HttpServletRequest
request
)
public
boolean
isRepeatSubmit
(
HttpServletRequest
request
,
RepeatSubmit
annotation
)
{
String
nowParams
=
""
;
if
(
request
instanceof
RepeatedlyRequestWrapper
)
...
...
@@ -87,7 +76,7 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
if
(
sessionMap
.
containsKey
(
url
))
{
Map
<
String
,
Object
>
preDataMap
=
(
Map
<
String
,
Object
>)
sessionMap
.
get
(
url
);
if
(
compareParams
(
nowDataMap
,
preDataMap
)
&&
compareTime
(
nowDataMap
,
preDataMap
))
if
(
compareParams
(
nowDataMap
,
preDataMap
)
&&
compareTime
(
nowDataMap
,
preDataMap
,
annotation
.
interval
()
))
{
return
true
;
}
...
...
@@ -95,7 +84,7 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
}
Map
<
String
,
Object
>
cacheMap
=
new
HashMap
<
String
,
Object
>();
cacheMap
.
put
(
url
,
nowDataMap
);
redisCache
.
setCacheObject
(
cacheRepeatKey
,
cacheMap
,
intervalTime
,
TimeUnit
.
SECONDS
);
redisCache
.
setCacheObject
(
cacheRepeatKey
,
cacheMap
,
annotation
.
interval
(),
TimeUnit
.
MILLI
SECONDS
);
return
false
;
}
...
...
@@ -112,11 +101,11 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
/**
* 判断两次间隔时间
*/
private
boolean
compareTime
(
Map
<
String
,
Object
>
nowMap
,
Map
<
String
,
Object
>
preMap
)
private
boolean
compareTime
(
Map
<
String
,
Object
>
nowMap
,
Map
<
String
,
Object
>
preMap
,
int
interval
)
{
long
time1
=
(
Long
)
nowMap
.
get
(
REPEAT_TIME
);
long
time2
=
(
Long
)
preMap
.
get
(
REPEAT_TIME
);
if
((
time1
-
time2
)
<
(
this
.
intervalTime
*
1000
)
)
if
((
time1
-
time2
)
<
interval
)
{
return
true
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment