Ver código fonte

收款方式

xujunwei 2 anos atrás
pai
commit
b0fbfe5cc6

+ 7 - 0
framework-boot/src/main/java/com/mrxu/framework/boot/entity/RpcRequestInfo.java

@@ -4,6 +4,7 @@ import lombok.Data;
 import org.slf4j.MDC;
 import org.slf4j.MDC;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.List;
 
 
 @Data
 @Data
 public class RpcRequestInfo implements Serializable {
 public class RpcRequestInfo implements Serializable {
@@ -32,6 +33,8 @@ public class RpcRequestInfo implements Serializable {
 
 
     protected String ip;
     protected String ip;
 
 
+    protected List<Integer> scopeDeptIds;// 登录用户数据权限
+
     protected String fromServiceName;
     protected String fromServiceName;
 
 
     public static String getTraceId() {
     public static String getTraceId() {
@@ -50,6 +53,10 @@ public class RpcRequestInfo implements Serializable {
         return get().ip;
         return get().ip;
     }
     }
 
 
+    public static List<Integer> getScopeDeptIds() {
+        return get().scopeDeptIds;
+    }
+
     public static String getFromServiceName() {
     public static String getFromServiceName() {
         return get().fromServiceName;
         return get().fromServiceName;
     }
     }

+ 22 - 4
framework-boot/src/main/java/com/mrxu/framework/boot/feign/FeignRequestInterceptor.java

@@ -6,6 +6,9 @@ import feign.RequestTemplate;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
 /**
  * 功能概要:[feign拦截器主要用于透传用户信息等数据] <br>
  * 功能概要:[feign拦截器主要用于透传用户信息等数据] <br>
  */
  */
@@ -21,18 +24,33 @@ public class FeignRequestInterceptor implements RequestInterceptor {
      */
      */
     @Override
     @Override
     public void apply(RequestTemplate requestTemplate) {
     public void apply(RequestTemplate requestTemplate) {
-        if(StringUtils.isNotBlank(RpcRequestInfo.getIp())){
+        if(StringUtils.isNotBlank(RpcRequestInfo.getIp())) {
             requestTemplate.header(HeaderConstant.IP,RpcRequestInfo.getIp());
             requestTemplate.header(HeaderConstant.IP,RpcRequestInfo.getIp());
         }
         }
-        if(StringUtils.isNotBlank(RpcRequestInfo.getTenantId())){
+        if(StringUtils.isNotBlank(RpcRequestInfo.getTenantId())) {
             requestTemplate.header(HeaderConstant.TENANT_ID,RpcRequestInfo.getTenantId());
             requestTemplate.header(HeaderConstant.TENANT_ID,RpcRequestInfo.getTenantId());
         }
         }
         requestTemplate.header(HeaderConstant.FROM_SERVICE_NAME,fromServiceName);
         requestTemplate.header(HeaderConstant.FROM_SERVICE_NAME,fromServiceName);
-        if(StringUtils.isNotBlank(RpcRequestInfo.getUsername())){
+        if(StringUtils.isNotBlank(RpcRequestInfo.getUsername())) {
             requestTemplate.header(HeaderConstant.USER_NAME,RpcRequestInfo.getUsername());
             requestTemplate.header(HeaderConstant.USER_NAME,RpcRequestInfo.getUsername());
         }
         }
-        if(StringUtils.isNotBlank(RpcRequestInfo.getTraceId())){
+        if(StringUtils.isNotBlank(RpcRequestInfo.getTraceId())) {
             requestTemplate.header(HeaderConstant.TRACE_ID,RpcRequestInfo.getTraceId());
             requestTemplate.header(HeaderConstant.TRACE_ID,RpcRequestInfo.getTraceId());
         }
         }
+
+        if(RpcRequestInfo.getScopeDeptIds() != null) {
+            requestTemplate.header(HeaderConstant.SCOPE_DEPT_IDS, intToStrArray(RpcRequestInfo.getScopeDeptIds()));
+        }
+    }
+
+    private List<String> intToStrArray(List<Integer> list) {
+        if(list == null) {
+            return null;
+        }
+        List<String> rs = new ArrayList<>();
+        for(Integer temp : list) {
+            rs.add(String.valueOf(temp));
+        }
+        return rs;
     }
     }
 }
 }

+ 5 - 0
framework-boot/src/main/java/com/mrxu/framework/boot/feign/HeaderConstant.java

@@ -32,4 +32,9 @@ public interface HeaderConstant {
      * 登录者ip
      * 登录者ip
      */
      */
     public static final String IP = "ip";
     public static final String IP = "ip";
+
+    /**
+     * 登录者拥有的部门数据权限
+     */
+    public static final String SCOPE_DEPT_IDS = "scope_dept_ids";
 }
 }

+ 18 - 0
framework-boot/src/main/java/com/mrxu/framework/boot/handle/UserInfoHandler.java

@@ -8,6 +8,8 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
 /**
  * 功能概要:[当前登录者的用户信息] <br>
  * 功能概要:[当前登录者的用户信息] <br>
@@ -40,9 +42,25 @@ public class UserInfoHandler extends HandlerInterceptorAdapter {
         if (StringUtils.isNotBlank(userName)) {
         if (StringUtils.isNotBlank(userName)) {
             requestInfo.setUsername(userName);
             requestInfo.setUsername(userName);
         }
         }
+        String scopeDeptIds = request.getHeader(HeaderConstant.SCOPE_DEPT_IDS);
+        if (StringUtils.isNotBlank(scopeDeptIds)) {
+            requestInfo.setScopeDeptIds(strToArray(scopeDeptIds));
+        }
         return true;
         return true;
     }
     }
 
 
+    private List<Integer> strToArray(String scopeDeptIds) {
+        if(scopeDeptIds == null) {
+            return null;
+        }
+        List<Integer> rs = new ArrayList<>();
+        String[] array = scopeDeptIds.split(",");
+        for(String temp : array) {
+            rs.add(Integer.valueOf(temp));
+        }
+        return rs;
+    }
+
     @Override
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
         //清理当前登录者信息
         //清理当前登录者信息