Prechádzať zdrojové kódy

继续完善代理中心服务器代码

andyliu 7 mesiacov pred
rodič
commit
c3c3cb96b3
18 zmenil súbory, kde vykonal 379 pridanie a 129 odobranie
  1. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/AIModelASProxyServlet.java
  2. 43 25
      src/main/java/com/shkpr/service/proxycenter/components/AbstractProxyServlet.java
  3. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/AnalyASProxyServlet.java
  4. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/BaseASProxyServlet.java
  5. 9 2
      src/main/java/com/shkpr/service/proxycenter/components/DataGWASProxyServlet.java
  6. 58 0
      src/main/java/com/shkpr/service/proxycenter/components/GeoServerProxyServlet.java
  7. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/GisAEASProxyServlet.java
  8. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/IotStatsASProxyServlet.java
  9. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/IotStatsOldProxyServlet.java
  10. 40 0
      src/main/java/com/shkpr/service/proxycenter/components/MyHttpServletRequestWrapper.java
  11. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/PushASProxyServlet.java
  12. 2 2
      src/main/java/com/shkpr/service/proxycenter/components/TaskASProxyServlet.java
  13. 105 48
      src/main/java/com/shkpr/service/proxycenter/configuration/WebSecurityConfiguration.java
  14. 0 27
      src/main/java/com/shkpr/service/proxycenter/constants/ApiURI.java
  15. 14 0
      src/main/java/com/shkpr/service/proxycenter/constants/ProxyPassDefine.java
  16. 16 1
      src/main/java/com/shkpr/service/proxycenter/controllerfilter/SelfBizFilterMgr.java
  17. 36 0
      src/main/java/com/shkpr/service/proxycenter/globalcache/GlobalData.java
  18. 42 10
      src/main/resources/application.properties

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/AIModelASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class AIModelASProxyServlet extends AbstractProxyServlet {
-    public AIModelASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public AIModelASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 43 - 25
src/main/java/com/shkpr/service/proxycenter/components/AbstractProxyServlet.java

@@ -2,6 +2,7 @@ package com.shkpr.service.proxycenter.components;
 
 import com.shkpr.service.proxycenter.commtools.HttpTool;
 import com.shkpr.service.proxycenter.constants.ApiURI;
+import com.shkpr.service.proxycenter.constants.ProxyPassDefine;
 import com.shkpr.service.proxycenter.controllerfilter.TokenAuthenticationService;
 import com.shkpr.service.proxycenter.dto.ResponseCode;
 import org.apache.http.client.HttpClient;
@@ -10,6 +11,7 @@ import org.apache.http.conn.ssl.NoopHostnameVerifier;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.mitre.dsmiley.httpproxy.ProxyServlet;
+import org.springframework.util.StringUtils;
 
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.X509TrustManager;
@@ -24,10 +26,16 @@ import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 
 public abstract class AbstractProxyServlet extends ProxyServlet {
-    private String apiProxy = "https://127.0.0.1:9000/";
-
-    public AbstractProxyServlet(String apiProxy) {
-        this.apiProxy = apiProxy;
+    private String proxyAddress = "https://127.0.0.1:9000/";
+    private String proxyId = "";
+    private String proxyTK = "";
+    private String proxyUri = "";
+
+    public AbstractProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        this.proxyUri = proxyUri;
+        this.proxyId = proxyId;
+        this.proxyAddress = proxyAddress;
+        this.proxyTK = proxyTK;
     }
 
     public AbstractProxyServlet() {
@@ -75,31 +83,28 @@ public abstract class AbstractProxyServlet extends ProxyServlet {
         final String destUri = servletRequest.getRequestURI();
         servletRequest.setAttribute(ATTR_TARGET_URI, null);
 
-        if (destUri.startsWith(ApiURI.URI_BASE_PROXY_H)){
-            //若不重置super.targetUri;则super.targetUri实际地址为【/data-gw/3th/dma-proxy/*】中*号匹配的部分
-            //若重置super.targetUri=XXX; 则super.targetUri实际地址为XXX +【/data-gw/3th/dma-proxy/*】中*号匹配的部分
-            super.targetUri = ApiURI.URI_BASE_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_TASK_PROXY_H)){
-            super.targetUri = ApiURI.URI_TASK_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_ANALY_PROXY_H)){
-            //nothing
-        }else if (destUri.startsWith(ApiURI.URI_PUSH_PROXY_H)){
-            super.targetUri = ApiURI.URI_PUSH_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_IOT_STATS_PROXY_H)){
-            super.targetUri = ApiURI.URI_IOT_STATS_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_IOT_STATS_OLD_PROXY_H)){
-            super.targetUri = ApiURI.URI_IOT_STATS_OLD_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_GIS_AE_PROXY_H)){
-            super.targetUri = ApiURI.URI_GIS_AE_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_DATE_GW_PROXY_H)){
-            super.targetUri = ApiURI.URI_DATE_GW_PROXY_H;
-        }else if (destUri.startsWith(ApiURI.URI_AI_MODEL_PROXY_H)){
-            super.targetUri = ApiURI.URI_AI_MODEL_PROXY_H;
+        if (!destUri.startsWith(proxyUri)){
+            HttpTool.handlerHttpErrorStatus(servletResponse, ResponseCode.STATUS_NOT_FOUND_URI);
+            return;
+        }
+
+        switch (proxyId){
+            case ProxyPassDefine.PROXY_GEOSERVER:
+            case ProxyPassDefine.PROXY_ANALY:{
+                //nothing
+            }
+            break;
+            default: {
+                //若不重置super.targetUri;则super.targetUri实际地址为【/data-gw/3th/dma-proxy/*】中*号匹配的部分
+                //若重置super.targetUri=XXX; 则super.targetUri实际地址为XXX +【/data-gw/3th/dma-proxy/*】中*号匹配的部分
+                super.targetUri = proxyUri;
+            }
+            break;
         }
 
         URI uri = null;
         try {
-            uri = new URI(apiProxy);
+            uri = new URI(proxyAddress);
         } catch (URISyntaxException e) {
             e.printStackTrace();
         }
@@ -110,6 +115,9 @@ public abstract class AbstractProxyServlet extends ProxyServlet {
 
     protected ResponseCode checkHeader(HttpServletRequest servletRequest, HttpServletResponse servletResponse){
         ResponseCode oRes = ResponseCode.RESULT_NORMAL;
+        String strKprServerToken = servletRequest.getHeader(ApiURI.HEADER_AUTH_VERIFY);
+        if (!StringUtils.isEmpty(proxyTK) && proxyTK.equalsIgnoreCase(strKprServerToken))
+            return ResponseCode.RESULT_NORMAL;
         /*String strContentType = servletRequest.getHeader("Content-Type");
         strContentType = strContentType!=null ? strContentType.toLowerCase():"xxx";
         String strContent = servletRequest.getHeader("Content");                       //经测试发现ios只能设置Content
@@ -131,5 +139,15 @@ public abstract class AbstractProxyServlet extends ProxyServlet {
         return oRes;
     }
 
+
+    protected void handlerHttpErrorStatusWithNoBody(HttpServletResponse httpServletResponse, ResponseCode emResCode){
+        httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
+        httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,DELETE,PUT");
+        httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with,Content-Type,Authorization");
+        httpServletResponse.setContentType(TokenAuthenticationService.HEADER_CONTENT_TYPE);
+        try {
+            httpServletResponse.setStatus(emResCode.toInt());
+        }catch (Exception ex){}
+    }
 }
 

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/AnalyASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class AnalyASProxyServlet extends AbstractProxyServlet {
-    public AnalyASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public AnalyASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/BaseASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class BaseASProxyServlet extends AbstractProxyServlet {
-    public BaseASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public BaseASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 9 - 2
src/main/java/com/shkpr/service/proxycenter/components/DataGWASProxyServlet.java

@@ -1,6 +1,9 @@
 package com.shkpr.service.proxycenter.components;
 
+import com.shkpr.service.proxycenter.constants.ApiURI;
+import com.shkpr.service.proxycenter.constants.ProxyPassDefine;
 import com.shkpr.service.proxycenter.dto.ResponseCode;
+import com.shkpr.service.proxycenter.globalcache.GlobalData;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -8,8 +11,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class DataGWASProxyServlet extends AbstractProxyServlet {
-    public DataGWASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public DataGWASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override
@@ -19,6 +22,10 @@ public class DataGWASProxyServlet extends AbstractProxyServlet {
 
     @Override
     protected ResponseCode checkHeader(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
+        if (servletRequest.getRequestURI().startsWith(String.format("%s/3th"
+                , GlobalData.getInstance().getProxyToUri().get(ProxyPassDefine.PROXY_GW)))){
+            return ResponseCode.RESULT_NORMAL;
+        }
         return super.checkHeader(servletRequest, servletResponse);
     }
 }

+ 58 - 0
src/main/java/com/shkpr/service/proxycenter/components/GeoServerProxyServlet.java

@@ -0,0 +1,58 @@
+package com.shkpr.service.proxycenter.components;
+
+import com.global.base.tools.AESUtil;
+import com.global.base.tools.CastUtil;
+import com.global.base.tools.EncryptionUtil;
+import com.shkpr.service.proxycenter.commtools.TimeTool;
+import com.shkpr.service.proxycenter.constants.ApiURI;
+import com.shkpr.service.proxycenter.controllerfilter.TokenAuthenticationService;
+import com.shkpr.service.proxycenter.dto.ResponseCode;
+import com.shkpr.service.proxycenter.globalcache.GlobalData;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Base64;
+
+public class GeoServerProxyServlet extends AbstractProxyServlet {
+    public GeoServerProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
+    }
+
+    @Override
+    protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException {
+        super.service(servletRequest, servletResponse);
+    }
+
+    @Override
+    protected ResponseCode checkHeader(HttpServletRequest servletRequest, HttpServletResponse servletResponse) {
+        //ResponseCode code = super.checkHeader(servletRequest, servletResponse);
+        //if (code != ResponseCode.RESULT_NORMAL)
+        //    return code;
+        String strKprServerToken = servletRequest.getHeader(ApiURI.HEADER_AUTH_VERIFY);
+        if (GlobalData.getInstance().getInternalCallPassword().equalsIgnoreCase(strKprServerToken))
+            return ResponseCode.RESULT_NORMAL;
+
+        String strSign = servletRequest.getHeader(ApiURI.HEADER_SIGNATURE);
+        String strTime = servletRequest.getHeader(ApiURI.HEADER_TIMESTAMP);
+        if (StringUtils.isEmpty(strSign) || StringUtils.isEmpty(strTime))
+            return ResponseCode.STATUS_DENY_OPERATE_USER;
+
+        long reqUTC = CastUtil.castUTCLong(strTime, 0L);
+        if (!(TimeTool.isMsUTC(reqUTC) && Math.abs(System.currentTimeMillis()-reqUTC) <= 5*TimeTool.MS_ONE_MIN)){
+            return ResponseCode.STATUS_DENY_OPERATE_USER;
+        }
+
+        String signDecode = AESUtil.AESDecrypt(AESUtil.Mode.CBC, AESUtil.Padding.PKCS5_PADDING, EncryptionUtil.MD5Hash(TokenAuthenticationService.SECRET+strTime).substring(8,24).toLowerCase(), strSign);
+        String needCheck = "";
+        try {
+            needCheck = new String(Base64.getEncoder().encode(strTime.getBytes()), "UTF-8");
+        }catch (Exception e){}
+
+        if (!signDecode.equals(needCheck))
+            return ResponseCode.STATUS_DENY_OPERATE_USER;
+        return ResponseCode.RESULT_NORMAL;
+    }
+}

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/GisAEASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class GisAEASProxyServlet extends AbstractProxyServlet {
-    public GisAEASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public GisAEASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/IotStatsASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class IotStatsASProxyServlet extends AbstractProxyServlet {
-    public IotStatsASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public IotStatsASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/IotStatsOldProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class IotStatsOldProxyServlet extends AbstractProxyServlet {
-    public IotStatsOldProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public IotStatsOldProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 40 - 0
src/main/java/com/shkpr/service/proxycenter/components/MyHttpServletRequestWrapper.java

@@ -0,0 +1,40 @@
+package com.shkpr.service.proxycenter.components;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.util.*;
+
+public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
+    private Map<String, String> headerMap = new HashMap<String, String>();
+    public MyHttpServletRequestWrapper(HttpServletRequest request) {
+        super(request);
+    }
+
+    public void addHeader(String name, String value) {headerMap.put(name, value);}
+
+    @Override
+    public String getHeader(String name) {
+        String headerValue = super.getHeader(name);
+        if (headerMap.containsKey(name))
+            headerValue = headerMap.get(name);
+        return headerValue;
+    }
+
+    @Override
+    public Enumeration<String> getHeaderNames() {
+        List<String> names = Collections.list(super.getHeaderNames());
+        for (String name:headerMap.keySet())
+            names.add(name);
+        return Collections.enumeration(names);
+    }
+
+    @Override
+    public Enumeration<String> getHeaders(String name) {
+        List<String> values = Collections.list(super.getHeaders(name));
+        if (headerMap.containsKey(name))
+            values.add(headerMap.get(name));
+        return Collections.enumeration(values);
+    }
+
+}
+

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/PushASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class PushASProxyServlet extends AbstractProxyServlet {
-    public PushASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public PushASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 2 - 2
src/main/java/com/shkpr/service/proxycenter/components/TaskASProxyServlet.java

@@ -8,8 +8,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class TaskASProxyServlet extends AbstractProxyServlet {
-    public TaskASProxyServlet(String apiProxy) {
-        super(apiProxy);
+    public TaskASProxyServlet(String proxyUri, String proxyId, String proxyAddress, String proxyTK) {
+        super(proxyUri, proxyId, proxyAddress, proxyTK);
     }
 
     @Override

+ 105 - 48
src/main/java/com/shkpr/service/proxycenter/configuration/WebSecurityConfiguration.java

@@ -1,11 +1,15 @@
 package com.shkpr.service.proxycenter.configuration;
 
+import com.global.base.tools.EncryptionUtil;
+import com.global.base.tools.RandomUtil;
 import com.shkpr.service.proxycenter.components.*;
-import com.shkpr.service.proxycenter.constants.ApiURI;
+import com.shkpr.service.proxycenter.constants.ProxyPassDefine;
 import com.shkpr.service.proxycenter.controllerfilter.CustomAuthenticationProvider;
 import com.shkpr.service.proxycenter.controllerfilter.SelfBizFilterMgr;
+import com.shkpr.service.proxycenter.globalcache.GlobalData;
 import org.mitre.dsmiley.httpproxy.ProxyServlet;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -18,6 +22,10 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * 该类主要用来做权限控制的配置、以及注册各种过滤器
  * 执行顺序
@@ -28,6 +36,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
 @Configuration
 @EnableWebSecurity
 @EnableGlobalMethodSecurity(prePostEnabled = true)                     //@PreAuthorize对权限的注解需要设置prePostEnabled = true
+@ConfigurationProperties(prefix = "atuocfg")
 public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
     @Value("${global.test.pressure:false}")
     private boolean mBForPressureTest;
@@ -35,32 +44,33 @@ public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
     @Value("${global.ops.lan.ip:127.0.0.1}")
     private String mStrOpsServerLanIP;
 
-    @Value("${cloud.proxy.address.base:}")
-    private String mStrBaseASProxyAddress = "";
-
-    @Value("${cloud.proxy.address.task:}")
-    private String mStrTaskASProxyAddress = "";
+    private Map<String, String> proxyToAddress = new HashMap<>();
+    private Map<String, String> proxyToPassword = new HashMap<>();
+    private Map<String, String> proxyToUri = new HashMap<>();
 
-    @Value("${cloud.proxy.address.analy:}")
-    private String mStrAnalyASProxyAddress = "";
-
-    @Value("${cloud.proxy.address.gw:}")
-    private String mStrDataGWASProxyAddress = "";
+    public Map<String, String> getProxyToAddress() {
+        return proxyToAddress;
+    }
 
-    @Value("${cloud.proxy.address.ai:}")
-    private String mStrAIModelASProxyAddress = "";
+    public void setProxyToAddress(Map<String, String> proxyToAddress) {
+        this.proxyToAddress = proxyToAddress;
+    }
 
-    @Value("${cloud.proxy.address.gis:}")
-    private String mStrGisAEASProxyAddress = "";
+    public Map<String, String> getProxyToPassword() {
+        return proxyToPassword;
+    }
 
-    @Value("${cloud.proxy.address.old-stats:}")
-    private String mStrOldStatsASProxyAddress = "";
+    public void setProxyToPassword(Map<String, String> proxyToPassword) {
+        this.proxyToPassword = proxyToPassword;
+    }
 
-    @Value("${cloud.proxy.address.stats:}")
-    private String mStrStatsASProxyAddress = "";
+    public Map<String, String> getProxyToUri() {
+        return proxyToUri;
+    }
 
-    @Value("${cloud.proxy.address.push:}")
-    private String mStrPushASProxyAddress = "";
+    public void setProxyToUri(Map<String, String> proxyToUri) {
+        this.proxyToUri = proxyToUri;
+    }
 
     @Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
@@ -99,94 +109,141 @@ public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
         */
     }
 
-    @Bean(name = "base")
+    @Bean(name = ProxyPassDefine.PROXY_BASE)
     @Primary
     public ServletRegistrationBean<BaseASProxyServlet> servletServletRegistrationForBase() {
         ServletRegistrationBean<BaseASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new BaseASProxyServlet(mStrBaseASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_BASE_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new BaseASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_BASE)
+                , ProxyPassDefine.PROXY_BASE
+                , proxyToAddress.get(ProxyPassDefine.PROXY_BASE)
+                , EncryptionUtil.MD5Hash(proxyToPassword.getOrDefault(ProxyPassDefine.PROXY_BASE, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_BASE), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "task")
+    @Bean(name = ProxyPassDefine.PROXY_TASK)
     public ServletRegistrationBean<TaskASProxyServlet> servletServletRegistrationForTask() {
         ServletRegistrationBean<TaskASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new TaskASProxyServlet(mStrTaskASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_TASK_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new TaskASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_TASK)
+                , ProxyPassDefine.PROXY_TASK
+                , proxyToAddress.get(ProxyPassDefine.PROXY_TASK)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_TASK, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_TASK), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "ai-model")
+    @Bean(name = ProxyPassDefine.PROXY_AI_MODEL)
     public ServletRegistrationBean<AIModelASProxyServlet> servletServletRegistrationForAIModel() {
         ServletRegistrationBean<AIModelASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new AIModelASProxyServlet(mStrAIModelASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_AI_MODEL_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new AIModelASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_AI_MODEL)
+                , ProxyPassDefine.PROXY_AI_MODEL
+                , proxyToAddress.get(ProxyPassDefine.PROXY_AI_MODEL)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_AI_MODEL, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_TASK), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "data-gw")
+    @Bean(name = ProxyPassDefine.PROXY_GW)
     public ServletRegistrationBean<DataGWASProxyServlet> servletServletRegistrationForDataGW() {
         ServletRegistrationBean<DataGWASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new DataGWASProxyServlet(mStrDataGWASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_DATE_GW_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new DataGWASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_GW)
+                , ProxyPassDefine.PROXY_GW
+                , proxyToAddress.get(ProxyPassDefine.PROXY_GW)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_GW, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_GW), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "gis-ae")
+    @Bean(name = ProxyPassDefine.PROXY_GIS)
     public ServletRegistrationBean<GisAEASProxyServlet> servletServletRegistrationForGisAe() {
         ServletRegistrationBean<GisAEASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new GisAEASProxyServlet(mStrGisAEASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_GIS_AE_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new GisAEASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_GIS)
+                , ProxyPassDefine.PROXY_GIS
+                , proxyToAddress.get(ProxyPassDefine.PROXY_GIS)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_GIS, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_GIS), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "iot-stats")
+    @Bean(name = ProxyPassDefine.PROXY_STATS)
     public ServletRegistrationBean<IotStatsASProxyServlet> servletServletRegistrationForIotStats() {
         ServletRegistrationBean<IotStatsASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new IotStatsASProxyServlet(mStrStatsASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_IOT_STATS_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new IotStatsASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_STATS)
+                , ProxyPassDefine.PROXY_STATS
+                , proxyToAddress.get(ProxyPassDefine.PROXY_STATS)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_STATS, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_STATS), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "old-iot-stats")
+    @Bean(name = ProxyPassDefine.PROXY_OLD_STATS)
     public ServletRegistrationBean<IotStatsOldProxyServlet> servletServletRegistrationForOldIotStats() {
         ServletRegistrationBean<IotStatsOldProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new IotStatsOldProxyServlet(mStrOldStatsASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_IOT_STATS_OLD_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new IotStatsOldProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_OLD_STATS)
+                , ProxyPassDefine.PROXY_OLD_STATS
+                , proxyToAddress.get(ProxyPassDefine.PROXY_OLD_STATS)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_OLD_STATS, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_OLD_STATS), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "push")
+    @Bean(name = ProxyPassDefine.PROXY_PUSH)
     public ServletRegistrationBean<PushASProxyServlet> servletServletRegistrationForPush() {
         ServletRegistrationBean<PushASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new PushASProxyServlet(mStrPushASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_PUSH_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new PushASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_PUSH)
+                , ProxyPassDefine.PROXY_PUSH
+                , proxyToAddress.get(ProxyPassDefine.PROXY_PUSH)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_PUSH, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_PUSH), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
 
-    @Bean(name = "analy")
+    @Bean(name = ProxyPassDefine.PROXY_ANALY)
     public ServletRegistrationBean<AnalyASProxyServlet> servletServletRegistrationForAnaly() {
         ServletRegistrationBean<AnalyASProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
-        servletRegistrationBean.setServlet(new AnalyASProxyServlet(mStrAnalyASProxyAddress));
-        servletRegistrationBean.addUrlMappings(String.format("%s/%s", ApiURI.URI_ANALY_PROXY_H, "*"));
+        servletRegistrationBean.setServlet(new AnalyASProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_ANALY)
+                , ProxyPassDefine.PROXY_ANALY
+                , proxyToAddress.get(ProxyPassDefine.PROXY_ANALY)
+                , EncryptionUtil.MD5Hash(proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_ANALY, RandomUtil.getRandomStr(8)))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_ANALY), "*"));
+        servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
+        servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
+        return servletRegistrationBean;
+    }
+
+    @Bean(name = ProxyPassDefine.PROXY_GEOSERVER)
+    public ServletRegistrationBean<GeoServerProxyServlet> servletServletRegistrationForGeoServer() {
+        ServletRegistrationBean<GeoServerProxyServlet> servletRegistrationBean = new ServletRegistrationBean<>();
+        servletRegistrationBean.setServlet(new GeoServerProxyServlet(proxyToUri.get(ProxyPassDefine.PROXY_GEOSERVER)
+                , ProxyPassDefine.PROXY_GEOSERVER
+                , proxyToAddress.get(ProxyPassDefine.PROXY_GEOSERVER)
+                , proxyToAddress.getOrDefault(ProxyPassDefine.PROXY_ANALY, RandomUtil.getRandomStr(8))));
+        servletRegistrationBean.addUrlMappings(String.format("%s/%s", proxyToUri.get(ProxyPassDefine.PROXY_GEOSERVER), "*"));
         servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, "false");
         servletRegistrationBean.addInitParameter( "targetUri", "https://127.0.0.1:9000");
         return servletRegistrationBean;
     }
+
+    @PostConstruct
+    public void init(){
+        GlobalData.getInstance().initProxyToAddress(proxyToAddress);
+        GlobalData.getInstance().initProxyToPassword(proxyToPassword);
+        GlobalData.getInstance().initProxyToUri(proxyToUri);
+    }
 }

+ 0 - 27
src/main/java/com/shkpr/service/proxycenter/constants/ApiURI.java

@@ -79,31 +79,4 @@ public class ApiURI {
 
 
     public static final String URI_INTERNAL_OPS_XXX = "/ops/**";
-
-    public static final String URI_BASE_PROXY_H = "/base";
-    public static final String URI_BASE_PROXY_XXX = "/base/**";
-
-    public static final String URI_TASK_PROXY_H = "/task";
-    public static final String URI_TASK_PROXY_XXX = "/task/**";
-
-    public static final String URI_AI_MODEL_PROXY_H = "/ai-model";
-    public static final String URI_AI_MODEL_PROXY_XXX = "/ai-model/**";
-
-    public static final String URI_ANALY_PROXY_H = "/analy";
-    public static final String URI_ANALY_PROXY_XXX = "/analy/**";
-
-    public static final String URI_DATE_GW_PROXY_H = "/data-gw";
-    public static final String URI_DATE_GW_PROXY_XXX = "/data-gw/**";
-
-    public static final String URI_GIS_AE_PROXY_H = "/gis-ae";
-    public static final String URI_GIS_AE_PROXY_XXX = "/gis-ae/**";
-
-    public static final String URI_IOT_STATS_OLD_PROXY_H = "/stats";
-    public static final String URI_IOT_STATS_OLD_PROXY_XXX = "/stats/**";
-
-    public static final String URI_IOT_STATS_PROXY_H = "/v3/stats";
-    public static final String URI_IOT_STATS_PROXY_XXX = "/v3/stats/**";
-
-    public static final String URI_PUSH_PROXY_H = "/push";
-    public static final String URI_PUSH_PROXY_XXX = "/push/**";
 }

+ 14 - 0
src/main/java/com/shkpr/service/proxycenter/constants/ProxyPassDefine.java

@@ -0,0 +1,14 @@
+package com.shkpr.service.proxycenter.constants;
+
+public interface ProxyPassDefine {
+    String PROXY_BASE = "base";
+    String PROXY_TASK = "task";
+    String PROXY_ANALY = "analy";
+    String PROXY_GW = "gw";
+    String PROXY_AI_MODEL = "ai-model";
+    String PROXY_GIS = "gis";
+    String PROXY_OLD_STATS = "old-stats";
+    String PROXY_STATS = "stats";
+    String PROXY_PUSH = "push";
+    String PROXY_GEOSERVER = "geoserver";
+}

+ 16 - 1
src/main/java/com/shkpr/service/proxycenter/controllerfilter/SelfBizFilterMgr.java

@@ -1,5 +1,8 @@
 package com.shkpr.service.proxycenter.controllerfilter;
 
+import com.shkpr.service.proxycenter.components.MyHttpServletRequestWrapper;
+import com.shkpr.service.proxycenter.constants.ProxyPassDefine;
+import com.shkpr.service.proxycenter.globalcache.GlobalData;
 import org.springframework.security.authentication.AuthenticationManager;
 
 import javax.servlet.FilterChain;
@@ -23,8 +26,20 @@ public class SelfBizFilterMgr extends SelfAuthenticationFilter {
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
+        MyHttpServletRequestWrapper requestWrapper = null;
         //System.out.println(this.mStrThisSampleName+"::doFilterInternal()..."+request.getContextPath()+" " + request.getRequestURI());
-        chain.doFilter(request, response); //当前URI没有匹配成功,向后传递继续匹配
+        if (request.getRequestURI().startsWith(GlobalData.getInstance().getProxyToUri().get(ProxyPassDefine.PROXY_GEOSERVER))){
+            try {
+                requestWrapper = new MyHttpServletRequestWrapper(request);
+                requestWrapper.addHeader("Authorization", "Basic "+GlobalData.getInstance().getProxyToPassword().get(ProxyPassDefine.PROXY_GEOSERVER));
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+        if (requestWrapper != null)
+            super.doFilterInternal(requestWrapper, response, chain);
+        else
+            super.doFilterInternal(request, response, chain); //当前URI没有匹配成功,向后传递继续匹配
     }
 }
 

+ 36 - 0
src/main/java/com/shkpr/service/proxycenter/globalcache/GlobalData.java

@@ -1,5 +1,7 @@
 package com.shkpr.service.proxycenter.globalcache;
 
+import com.shkpr.service.proxycenter.commtools.CommTool;
+
 import javax.validation.Validator;
 import javax.validation.ConstraintViolation;
 import javax.validation.executable.ExecutableValidator;
@@ -23,6 +25,10 @@ public class GlobalData {
     private String mStrOperatorAccount = "";
     private String mStrOperatorPassword = "";
 
+    private Map<String, String> proxyToAddress = new HashMap<>();
+    private Map<String, String> proxyToPassword = new HashMap<>();
+    private Map<String, String> proxyToUri = new HashMap<>();
+
     private long mTmUTCServiceOnline = 1580486400000L;        //服务上线的时间,默认为2020-02-01 00:00:00
     private String mStrInternalCallPassword = "";            //本机的内部通信可信任口令
     private static volatile GlobalData msInstance = null;
@@ -137,4 +143,34 @@ public class GlobalData {
     public String getInternalCallPassword() { return mStrInternalCallPassword; }
 
     public void setInternalCallPassword(String mStrInternalCallPassword) { this.mStrInternalCallPassword = mStrInternalCallPassword; }
+
+    public Map<String, String> getProxyToAddress() {
+        return proxyToAddress;
+    }
+
+    public void initProxyToAddress(Map<String, String> proxyToAddress) {
+        this.proxyToAddress.clear();
+        if (CommTool.mapSize(proxyToAddress) > 0)
+            this.proxyToAddress.putAll(proxyToAddress);
+    }
+
+    public Map<String, String> getProxyToPassword() {
+        return proxyToPassword;
+    }
+
+    public void initProxyToPassword(Map<String, String> proxyToPassword) {
+        this.proxyToPassword.clear();
+        if (CommTool.mapSize(proxyToPassword) > 0)
+            this.proxyToPassword.putAll(proxyToPassword);
+    }
+
+    public Map<String, String> getProxyToUri() {
+        return proxyToUri;
+    }
+
+    public void initProxyToUri(Map<String, String> proxyToUri) {
+        this.proxyToUri.clear();
+        if (CommTool.mapSize(proxyToUri) > 0)
+            this.proxyToUri.putAll(proxyToUri);
+    }
 }

+ 42 - 10
src/main/resources/application.properties

@@ -5,7 +5,7 @@ server.servlet.context-path= /
 # 错误页,指定发生错误时,跳转的URL。请查看BasicErrorController源码便知
 server.error.path= /
 # 服务端口
-server.port=9999
+server.port=9876
 #global.lan.test.log=true
 
 #spring boot 2.0在开启https时,若运行环境安装openssl后将以https-openssl模式运行,若未安装openssl时将以https-jsse模式运行
@@ -77,16 +77,48 @@ global.license.check.switch=false
 global.internal.operator.account=TriCooperation
 global.internal.operator.password=$2b$10$Scz7AoeOTUB69piABNLOEepFU7OesRDRStP43g9r7QFw0Go7KTo4u
 
+#本机的内部通信可信任口令
+global.internal.call.password=Tri@Tech
+
+#代理平台的匹配前缀
+atuocfg.proxyToUri[base]=/base
+atuocfg.proxyToUri[task]=/task
+atuocfg.proxyToUri[analy]=/analy
+atuocfg.proxyToUri[gw]=/data-gw
+atuocfg.proxyToUri[ai-model]=/ai-model
+atuocfg.proxyToUri[gis]=/gis-ae
+atuocfg.proxyToUri[old-stats]=/stats
+atuocfg.proxyToUri[stats]=/v3/stats
+atuocfg.proxyToUri[push]=/push
+atuocfg.proxyToUri[geoserver]=/kpr/geo-power
+
+#代理平台的目标地址
+atuocfg.proxyToAddress[base]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[task]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[analy]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[gw]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[ai-model]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[gis]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[old-stats]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[stats]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[push]=https://140.246.183.164:9000/
+atuocfg.proxyToAddress[geoserver]=http://140.246.183.164:8090/
+
+
+#代理平台的通信口令
+atuocfg.proxyToPassword[base]=Tri@Tech
+atuocfg.proxyToPassword[task]=Tri@Tech
+atuocfg.proxyToPassword[analy]=Tri@Tech
+atuocfg.proxyToPassword[gw]=Tri@Tech
+atuocfg.proxyToPassword[ai-model]=Tri@Tech
+atuocfg.proxyToPassword[gis]=Tri@Tech
+atuocfg.proxyToPassword[old-stats]=Tri@Tech
+atuocfg.proxyToPassword[stats]=Tri@Tech
+atuocfg.proxyToPassword[push]=Tri@Tech
+
+#GeoServer服务{账号:密码}的base64编码
+atuocfg.proxyToPassword[geoserver]=YWRtaW46a3ByLmdlb3NlcnZlckAyMzA3
 
-cloud.proxy.address.base=https://140.246.183.164:9000/
-cloud.proxy.address.task=https://140.246.183.164:9000/
-cloud.proxy.address.analy=https://140.246.183.164:9000/
-cloud.proxy.address.gw=https://140.246.183.164:9000/
-cloud.proxy.address.ai-model=https://140.246.183.164:9000/
-cloud.proxy.address.gis=https://140.246.183.164:9000/
-cloud.proxy.address.old-stats=https://140.246.183.164:9000/
-cloud.proxy.address.stats=https://140.246.183.164:9000/
-cloud.proxy.address.push=https://140.246.183.164:9000/