From aa4429a11d9b73bbcb1628090b6bafb75c4c6a00 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期三, 27 九月 2023 14:51:07 +0800
Subject: [PATCH] 修改代理服务-2

---
 src/main/java/com/moon/server/entity/all/StaticData.java    |    4 ++
 src/main/java/com/moon/server/service/sys/ProxyService.java |   44 ++++++++++++----------
 src/main/java/com/moon/server/helper/HttpHelper.java        |   40 +++++++++++++------
 3 files changed, 55 insertions(+), 33 deletions(-)

diff --git a/src/main/java/com/moon/server/entity/all/StaticData.java b/src/main/java/com/moon/server/entity/all/StaticData.java
index 5e44dd5..4574fe9 100644
--- a/src/main/java/com/moon/server/entity/all/StaticData.java
+++ b/src/main/java/com/moon/server/entity/all/StaticData.java
@@ -176,6 +176,10 @@
 
     public final static String DOM = "DOM";
 
+    public final static String REQUEST = "request";
+
+    public final static String GET_CAPABILITIES = "GetCapabilities";
+
     public final static String SUCCESS = "$SUCCESS";
 
     public final static String LINESTRING = "LINESTRING";
diff --git a/src/main/java/com/moon/server/helper/HttpHelper.java b/src/main/java/com/moon/server/helper/HttpHelper.java
index aef4376..6d621d0 100644
--- a/src/main/java/com/moon/server/helper/HttpHelper.java
+++ b/src/main/java/com/moon/server/helper/HttpHelper.java
@@ -273,23 +273,37 @@
             return;
         }
 
-        do {
-            if (null == res || StringHelper.isNull(res.getUrl())) {
+        switch (res.getCategory()) {
+            case 2:
+                copeGeoService(proxyResponse, request, response, res);
                 break;
-            }
+            case 3:
+                copeSjService(proxyResponse, request, response, res);
+                break;
+            default:
+                entity.writeTo(response.getOutputStream());
+                break;
+        }
+    }
 
-            Header[] headers = proxyResponse.getHeaders("content-type");
-            if (null != headers && headers.length > 0 && headers[0].getValue().contains(StaticData.TEXT_XML)) {
-                String str = filterStr(request, response, res, EntityUtils.toString(entity, "UTF-8"));
+    private void copeGeoService(HttpResponse proxyResponse, HttpServletRequest request, HttpServletResponse response, ResEntity res) throws IOException {
+        if (StaticData.GET_CAPABILITIES.equals(request.getParameter(StaticData.REQUEST))) {
+            //
+        }
 
-                byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
-                response.setContentLength(bytes.length);
-                response.getOutputStream().write(bytes);
-                return;
-            }
-        } while (false);
+        proxyResponse.getEntity().writeTo(response.getOutputStream());
+    }
 
-        entity.writeTo(response.getOutputStream());
+    private void copeSjService(HttpResponse proxyResponse, HttpServletRequest request, HttpServletResponse response, ResEntity res) throws IOException {
+        Header[] headers = proxyResponse.getHeaders("content-type");
+        if (null != headers && headers.length > 0 && headers[0].getValue().contains(StaticData.TEXT_XML)) {
+            String str = filterStr(request, response, res, EntityUtils.toString(proxyResponse.getEntity(), "UTF-8"));
+            byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
+            response.setContentLength(bytes.length);
+            response.getOutputStream().write(bytes);
+        } else {
+            proxyResponse.getEntity().writeTo(response.getOutputStream());
+        }
     }
 
     private String filterStr(HttpServletRequest request, HttpServletResponse response, ResEntity res, String str) {
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 7b96232..4b14343 100644
--- a/src/main/java/com/moon/server/service/sys/ProxyService.java
+++ b/src/main/java/com/moon/server/service/sys/ProxyService.java
@@ -4,7 +4,6 @@
 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;
@@ -61,7 +60,7 @@
         }
         insertLog(req, ue, resId);
 
-        String url = getUrl(req, entity, token, isRest);
+        String url = getUrl(req, ue, entity, token, isRest);
         res.setHeader("token", token);
         forward(req, res, entity, url);
     }
@@ -107,10 +106,9 @@
         if (StaticData.ADMIN.equals(ue.getUid())) {
             return true;
         }
-        // 7.妫�鏌ョ櫧鍚嶅崟
+        // 7.妫�鏌ョ櫧鍚嶅崟鍜孖P涓�鑷存��
         if (!checkWhiteList(ip, req)) {
-            // 妫�鏌P涓�鑷存��
-            if (!checkIpSource(ip, token)) {
+            if (!ip.equals(sysService.tokenService.getEntityByToken(token).getIp())) {
                 return WebHelper.writeStr2Page(res, AuthInterceptor.ILLEGAL_TOKEN);
             }
         }
@@ -147,15 +145,6 @@
     }
 
     /**
-     * 妫�鏌P涓�鑷存��
-     */
-    private boolean checkIpSource(String ip, String token) {
-        TokenEntity te = sysService.tokenService.getEntityByToken(token);
-
-        return te.getIp().equals(ip);
-    }
-
-    /**
      * 妫�鏌ヨ祫婧愭潈闄�
      */
     private ResEntity getResEntity(UserEntity ue, int resId) {
@@ -163,7 +152,6 @@
         if (null == rs || rs.isEmpty()) {
             return null;
         }
-
         // List<ResEntity> list = rs.stream().filter(resEntity -> resEntity.getId() == resId).collect(Collectors.toList())
         for (ResEntity entity : rs) {
             if (resId == entity.getId()) {
@@ -226,18 +214,18 @@
     /**
      * 鑾峰彇Url
      */
-    private String getUrl(HttpServletRequest req, ResEntity entity, String token, boolean isRest) {
+    private String getUrl(HttpServletRequest req, UserEntity ue, ResEntity entity, String token, boolean isRest) {
         String proxyUrl = entity.getProxy().replace("{token}", token);
         int end = req.getRequestURL().indexOf(proxyUrl) + proxyUrl.length();
 
         String url = entity.getUrl() + req.getRequestURL().substring(end);
-        if (null != req.getQueryString()) {
-            url = url + (url.contains("?") ? "&" : "?") + req.getQueryString();
-        }
         // category锛�0-鍏朵粬锛�1-GisServer锛�2-GeoServer锛�3-鏁扮畝
         if (StaticData.I2 == entity.getCategory()) {
-            //
+            url = getGeoServerUrl(req, ue, entity, url);
         } else if (StaticData.I3 == entity.getCategory()) {
+            if (null != req.getQueryString()) {
+                url = url + (url.contains("?") ? "&" : "?") + req.getQueryString();
+            }
             if (isRest) {
                 url = url.replace("/v6/wmts/", "/v6/rest/");
             }
@@ -250,6 +238,22 @@
     }
 
     /**
+     * 鑾峰彇GeoServer鍦板潃
+     */
+    private String getGeoServerUrl(HttpServletRequest req, UserEntity ue, ResEntity entity, String url) {
+        if (null == req.getQueryString()) {
+            return url;
+        }
+
+        String str = req.getQueryString();
+        if (!StaticData.GET_CAPABILITIES.equals(req.getParameter(StaticData.REQUEST))) {
+            //
+        }
+
+        return url + (url.contains("?") ? "&" : "?") + str;
+    }
+
+    /**
      * 杞彂璇锋眰
      */
     private void forward(HttpServletRequest request, HttpServletResponse response, ResEntity entity, String url) throws Exception {

--
Gitblit v1.9.3