Просмотр исходного кода

fix 修复 DataPermissionHelper 经过 dubbo 调用无法获取 request 问题

疯狂的狮子Li 4 лет назад
Родитель
Сommit
763c532deb

+ 16 - 4
ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/helper/DataPermissionHelper.java

@@ -4,6 +4,8 @@ import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.common.core.utils.ServletUtils;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.dubbo.rpc.RpcContext;
+import org.apache.dubbo.rpc.RpcServiceContext;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
@@ -19,7 +21,7 @@ import java.util.Map;
 @SuppressWarnings("unchecked cast")
 public class DataPermissionHelper {
 
-    private static final String DATA_PERMISSION_KEY = "data:permission";
+    public static final String DATA_PERMISSION_KEY = "data:permission";
 
     public static <T> T getVariable(String key) {
         Map<String, Object> context = getContext();
@@ -34,10 +36,20 @@ public class DataPermissionHelper {
 
     public static Map<String, Object> getContext() {
         HttpServletRequest request = ServletUtils.getRequest();
-        Object attribute = request.getAttribute(DATA_PERMISSION_KEY);
-        if (ObjectUtil.isNull(attribute)) {
-            request.setAttribute(DATA_PERMISSION_KEY, new HashMap<>());
+        Object attribute;
+        if (request != null) {
             attribute = request.getAttribute(DATA_PERMISSION_KEY);
+            if (ObjectUtil.isNull(attribute)) {
+                request.setAttribute(DATA_PERMISSION_KEY, new HashMap<>());
+                attribute = request.getAttribute(DATA_PERMISSION_KEY);
+            }
+        } else {
+            RpcServiceContext context = RpcContext.getServiceContext();
+            attribute = context.getObjectAttachment(DATA_PERMISSION_KEY);
+            if (ObjectUtil.isNull(attribute)) {
+                context.setObjectAttachment(DATA_PERMISSION_KEY, new HashMap<>());
+                attribute = context.getObjectAttachment(DATA_PERMISSION_KEY);
+            }
         }
         if (attribute instanceof Map) {
             return (Map<String, Object>) attribute;