Przeglądaj źródła

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

疯狂的狮子Li 4 lat temu
rodzic
commit
9b66aecaf9

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

@@ -77,12 +77,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();
         }
     }