Browse Source

fix 修复 幂等组件 逻辑问题导致线程变量未清除

疯狂的狮子Li 2 years ago
parent
commit
0c9398776a

+ 9 - 5
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java

@@ -85,12 +85,16 @@ public class RepeatSubmitAspect {
     @AfterReturning(pointcut = "@annotation(repeatSubmit)", returning = "jsonResult")
     public void doAfterReturning(JoinPoint joinPoint, RepeatSubmit repeatSubmit, Object jsonResult) {
         if (jsonResult instanceof R) {
-            R<?> r = (R<?>) jsonResult;
-            if (r.getCode() == R.SUCCESS) {
-                return;
+            try {
+                R<?> r = (R<?>) jsonResult;
+                // 成功则不删除redis数据 保证在有效时间内无法重复提交
+                if (r.getCode() == R.SUCCESS) {
+                    return;
+                }
+                RedisUtils.deleteObject(KEY_CACHE.get());
+            } finally {
+                KEY_CACHE.remove();
             }
-            RedisUtils.deleteObject(KEY_CACHE.get());
-            KEY_CACHE.remove();
         }
     }