瀏覽代碼

修改release方法,使其更加可靠

bihuisong 1 月之前
父節點
當前提交
6916156717
共有 1 個文件被更改,包括 50 次插入17 次删除
  1. 50 17
      src/main/java/com/ruoyi/system/controller/SysUserController.java

+ 50 - 17
src/main/java/com/ruoyi/system/controller/SysUserController.java

@@ -37,6 +37,8 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -276,11 +278,15 @@ public class SysUserController extends BaseController {
         JSONArray allArray = JSONUtil.parseArray(allVisu);
         JSONArray userHasArray = JSONUtil.parseArray(userHasVisu);
         //如果访问的是可视化菜单内的 并且用户没有这个菜单 返回false
-        logger.info("访问路径 ==>{}, 访问路径是否在系统菜单里 ==>{}, 用户是否具有该路径权限 ==>{}",referer,contains(allArray,referer),contains(userHasArray,referer));
-        if(contains(allArray,referer) && !contains(userHasArray,referer)){
-            result.put("flag",false);
-            result.put("url",configService.selectConfigByKey("backToMainPage"));
-            return result;
+        boolean isRefererInAll = contains(allArray,referer);
+        boolean isRefererInUserHas = contains(userHasArray,referer);
+        logger.info("访问路径 ==>{}, 访问路径是否在系统菜单里 ==>{}, 用户是否具有该路径权限 ==>{}",referer, isRefererInAll, isRefererInUserHas);
+        if(isRefererInAll){
+            if (!isRefererInUserHas) {
+                result.put("flag", false);
+                result.put("url", configService.selectConfigByKey("backToMainPage"));
+                return result;
+            }
         }
         result.put("flag",true);
         return result;
@@ -288,25 +294,52 @@ public class SysUserController extends BaseController {
 
     public boolean contains(JSONArray jsonArray, String referer){
         boolean flag = false;
-        for (int i = 0; i < jsonArray.size(); i++) {
-            Object url = null;
-            String type = JSONUtil.parseObj(jsonArray.get(i)).get("menuType").toString();
-            switch (type){
-                case "P" : url = JSONUtil.parseObj(jsonArray.get(i)).get("pageServerUrl");
-                case "ZC" : url = JSONUtil.parseObj(jsonArray.get(i)).get("pageRouterUrl");
-                case "FC" : url = JSONUtil.parseObj(jsonArray.get(i)).get("pageRouterUrl");
-                case "ZM": url = JSONUtil.parseObj(jsonArray.get(i)).get("componentUrl");
-                case "FM": url = JSONUtil.parseObj(jsonArray.get(i)).get("componentUrl");
+        String url = "";
+        for (Object o : jsonArray) {
+            String type = JSONUtil.parseObj(o).get("menuType").toString();
+            switch (type) {
+                case "P":
+                    url = JSONUtil.parseObj(o).getStr("pageServerUrl"); break;
+                case "ZC":
+                case "FC":
+                    url = JSONUtil.parseObj(o).getStr("pageRouterUrl"); break;
+                case "ZM":
+                case "FM":
+                    url = JSONUtil.parseObj(o).getStr("componentUrl"); break;
             }
-
-            if(url != null && referer.contains(url.toString())){
-                logger.info("Referer ==>{}, PageRouterUrl ==>{}",referer,url);
+            if (StringUtils.isNotEmpty(url) && compareUrlIpPort(referer, url)) {
+                logger.info("Referer ==>{}, PageRouterUrl ==>{}", referer, url);
                 flag = true;
             }
         }
         return flag;
     }
 
+    public boolean compareUrlIpPort(String url1, String url2){
+        try {
+            URL u1 = new URL(url1);
+            URL u2 = new URL(url2);
+
+            // 获取 host(IP 或域名)
+            String host1 = u1.getHost();
+            String host2 = u2.getHost();
+
+            // 获取端口(如果没有显式指定,返回 -1)
+            int port1 = u1.getPort();
+            int port2 = u2.getPort();
+
+            // 如果未指定端口,使用默认端口(HTTP=80, HTTPS=443)
+            if (port1 == -1) port1 = u1.getDefaultPort();
+            if (port2 == -1) port2 = u2.getDefaultPort();
+
+            // 比对 host 和 port
+            return host1.equals(host2) && (port1 == port2);
+        } catch (MalformedURLException e) {
+            logger.error("URL 格式错误: " + e.getMessage());
+        }
+        return false;
+    }
+
     /**
      * 根据用户编号获取详细信息
      */