Эх сурвалжийг харах

多线程导致的BaseContextHolder赋值问题

chenw 6 жил өмнө
parent
commit
513765f8b4

+ 3 - 3
bi-core/src/main/java/com/usoftchina/bi/core/base/BaseContextHolder.java

@@ -35,7 +35,7 @@ public class BaseContextHolder {
         return Integer.valueOf(String.valueOf(value));
     }
 
-    public static synchronized void setUserId(int userId) {
+    public static void setUserId(int userId) {
         set("userId", userId);
     }
 
@@ -44,7 +44,7 @@ public class BaseContextHolder {
         return String.valueOf(value);
     }
 
-    public static synchronized void setUserName(String userName) {
+    public static void setUserName(String userName) {
         set("userName", userName);
     }
 
@@ -53,7 +53,7 @@ public class BaseContextHolder {
         return String.valueOf(value);
     }
 
-    public static synchronized void setRole(String role){
+    public static void setRole(String role){
         set("role", role);
     }
 }

+ 13 - 3
bi-server/src/main/java/com/usoftchina/bi/server/aspect/JwtTokenAspect.java

@@ -21,6 +21,8 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 @Aspect
 @Component
@@ -92,9 +94,17 @@ public class JwtTokenAspect {
         } catch (MyException e) {
             throw new MyException(-505, "token过期");
         }
-        BaseContextHolder.setUserId(Integer.valueOf(jwt.getClaim("id").asString()));
-        BaseContextHolder.setUserName(jwt.getClaim("name").asString());
-        BaseContextHolder.setRole(jwt.getClaim("role").asString());
+
+        Lock lock = new ReentrantLock();
+        lock.lock();
+        try {
+            BaseContextHolder.setUserId(Integer.valueOf(jwt.getClaim("id").asString()));
+            BaseContextHolder.setUserName(jwt.getClaim("name").asString());
+            BaseContextHolder.setRole(jwt.getClaim("role").asString());
+        } finally {
+            lock.unlock();
+        }
+
         return jwt.getClaims();
     }
 }