From e16f5fdfbc1c49f4c519f05b190e96e497253b51 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期三, 13 十一月 2024 17:32:14 +0800
Subject: [PATCH] 1

---
 src/main/java/com/moon/server/service/sys/ProxyService.java |   32 ++++++++++++++++++++++++--------
 1 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/moon/server/service/sys/ProxyService.java b/src/main/java/com/moon/server/service/sys/ProxyService.java
index b6c8770..a633514 100644
--- a/src/main/java/com/moon/server/service/sys/ProxyService.java
+++ b/src/main/java/com/moon/server/service/sys/ProxyService.java
@@ -4,6 +4,7 @@
 import com.moon.server.entity.all.*;
 import com.moon.server.entity.sys.ResEntity;
 import com.moon.server.entity.sys.ResLogEntity;
+import com.moon.server.entity.sys.TokenEntity;
 import com.moon.server.entity.sys.UserEntity;
 import com.moon.server.helper.AsyncHelper;
 import com.moon.server.helper.HttpHelper;
@@ -54,7 +55,7 @@
         }
         // 9.鑾峰彇璧勬簮瀹炰綋锛宻tatus锛�0-绂佺敤锛�1-鍚敤鍘熷鍦板潃锛�2-鍚敤浠g悊鍦板潃
         ResEntity entity = getResEntity(ue, resId);
-        if (null == entity || StaticData.I2 != entity.getStatus() || StringHelper.isNull(entity.getProxy()) || StringHelper.isNull(entity.getUrl())) {
+        if (null == entity || StaticData.I1 > entity.getStatus() || StringHelper.isNull(entity.getProxy()) || StringHelper.isNull(entity.getUrl())) {
             WebHelper.writeStr2Page(res, ILLEGAL_RESOURCE);
             return;
         }
@@ -108,7 +109,7 @@
         }
         // 7.妫�鏌ョ櫧鍚嶅崟鍜孖P涓�鑷存��
         if (!checkWhiteList(ip, req)) {
-            if (!ip.equals(sysService.tokenService.getEntityByToken(token).getIp())) {
+            if (!checkIpSource(ip, token)) {
                 return WebHelper.writeStr2Page(res, AuthInterceptor.ILLEGAL_TOKEN);
             }
         }
@@ -142,6 +143,15 @@
         }
 
         return whiteList.contains(ip);
+    }
+
+    /**
+     * 妫�鏌P涓�鑷存�э細鍥哄畾浠ょ墝涓嶆鏌�
+     */
+    private boolean checkIpSource(String ip, String token) {
+        TokenEntity te = sysService.tokenService.getEntityByToken(token);
+
+        return StaticData.I1 == te.getType() || te.getIp().equals(ip);
     }
 
     /**
@@ -218,7 +228,7 @@
         String proxyUrl = entity.getProxy().replace("{token}", token);
         int end = req.getRequestURL().indexOf(proxyUrl) + proxyUrl.length();
 
-        String url = entity.getUrl() + req.getRequestURL().substring(end);
+        String url = entity.getUrl().trim() + req.getRequestURL().substring(end);
         // category锛�0-鍏朵粬锛�1-GisServer锛�2-GeoServer锛�3-鏁扮畝
         if (StaticData.I2 == entity.getCategory()) {
             url = getGeoServerUrl(req, ue, entity, url);
@@ -245,14 +255,20 @@
             return url;
         }
 
-        String str = req.getQueryString(), layers = req.getParameter("layers");
-        if (!StaticData.GET_CAPABILITIES.equals(req.getParameter(StaticData.REQUEST)) && null != layers) {
-            int start = str.indexOf("layers");
+        String str = req.getQueryString();
+        boolean isLower = str.contains(StaticData.SERVICE);
+        String layersKey = isLower ? StaticData.LAYERS : StaticData.LAYERS.toUpperCase();
+        String layers = req.getParameter(layersKey);
+        String request = req.getParameter(isLower ? StaticData.REQUEST : StaticData.REQUEST.toUpperCase());
+        if (!StaticData.GET_CAPABILITIES.equals(request)) {
+            int start = str.indexOf(layersKey);
             int end = str.indexOf("&", start);
             layers = filterGeoLayers(ue, layers);
 
-            str = str.replace(str.substring(start, end > -1 ? end : str.length()), "layers=" + layers);
+            str = str.replace(str.substring(start, end > -1 ? end : str.length()), layersKey + "=" + layers);
         } else {
+            List<String> tabs = StaticData.ADMIN.equals(ue.getUid()) ? permsService.selectAllTabs() : permsService.selectTabs(ue.getUid());
+            entity.setTab(null == tabs ? "" : StringHelper.join(tabs, ","));
             entity.setBak(StaticData.GET_CAPABILITIES);
         }
 
@@ -264,7 +280,7 @@
      */
     private String filterGeoLayers(UserEntity ue, String layers) {
         List<String> tabs = StaticData.ADMIN.equals(ue.getUid()) ? permsService.selectAllTabs() : permsService.selectTabs(ue.getUid());
-        if (null == tabs || tabs.isEmpty()) {
+        if (null == tabs || tabs.isEmpty() || StringHelper.isEmpty(layers)) {
             return "";
         }
 

--
Gitblit v1.9.3