From 9d328c7b96c8737ce44085fd9abb56ffae5e3975 Mon Sep 17 00:00:00 2001
From: vito <vito@fanruan.com>
Date: Wed, 11 Dec 2024 17:14:34 +0800
Subject: [PATCH] =?UTF-8?q?REPORT-140626=20&=20REPORT-140622=20=E8=BF=9C?=
 =?UTF-8?q?=E7=A8=8B=E8=BF=9E=E6=8E=A5=E4=B8=BB=E6=9C=BA=E9=85=8D=E7=BD=AE?=
 =?UTF-8?q?=E4=B9=A6=E5=86=99=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../main/java/com/fr/env/RemoteEnvPane.java   |  2 +-
 .../java/com/fr/env/RemoteWorkspaceURL.java   | 28 +++++++++++++++----
 .../com/fr/env/RemoteWorkspaceURLTest.java    | 18 ++++++++++++
 3 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
index 0dbc508ad6..4efb81d11c 100644
--- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
+++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java
@@ -336,7 +336,7 @@ public class RemoteEnvPane extends BasicBeanPane<RemoteDesignerWorkspaceInfo> {
 
     @Override
     public RemoteDesignerWorkspaceInfo updateBean() {
-        String url = removeSpaces(this.remoteWorkspaceURL.getURL());
+        String url = removeSpaces(this.remoteWorkspaceURL.getStandardURL());
         String username = removeSpaces(this.usernameInput.getText());
         String password = new String(this.passwordInput.getPassword());
         boolean rememberPwd = this.rememberPwdCheckbox.isSelected();
diff --git a/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java b/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java
index 9429b09d49..eff5139b7c 100644
--- a/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java
+++ b/designer-base/src/main/java/com/fr/env/RemoteWorkspaceURL.java
@@ -1,17 +1,17 @@
 package com.fr.env;
 
-import com.fr.log.FineLoggerFactory;
 import com.fr.stable.AssistUtils;
 import com.fr.stable.FCloneable;
 import com.fr.stable.StringUtils;
+
 import java.net.URI;
 import java.net.URISyntaxException;
-import com.fr.third.guava.base.Strings;
 
 /**
  * @author yaohwu
  */
 public class RemoteWorkspaceURL implements FCloneable {
+    private static final String SLASH = "/";
     private static final String IPV6_JUDGE_SYMBOL = "[";
 
     private static final String IPV6_JUDGE_SYMBOL2 = "]";
@@ -126,25 +126,41 @@ public class RemoteWorkspaceURL implements FCloneable {
         this.servlet = servlet != null ? servlet.trim() : StringUtils.EMPTY;
     }
 
+    /**
+     * 用于UI联动的URL,不一定是标准远程设计URL
+     *
+     * @return 原始或生成的URL
+     */
     public String getURL() {
         if (this.url != null) {
             return url;
         }
         String prefix = isHttps ? HTTPS : HTTP;
         String portColon = StringUtils.isNotEmpty(port) ? ":" : StringUtils.EMPTY;
-        String webAppNameSlash = StringUtils.isNotEmpty(web) ? "/" : StringUtils.EMPTY;
-        String servletNameSlash = "/";
-        this.url = prefix + host + portColon + port + webAppNameSlash + web + servletNameSlash;
+        String webAppNameSlash = StringUtils.isNotEmpty(web) ? SLASH : StringUtils.EMPTY;
+        this.url = prefix + host + portColon + port + webAppNameSlash + web + SLASH + servlet;
         return this.url;
     }
 
+    /**
+     * 获取用于远程连接的可用URL
+     *
+     * @return 远程连接的可用URL
+     */
+    public String getStandardURL() {
+        String prefix = isHttps ? HTTPS : HTTP;
+        String portColon = StringUtils.isNotEmpty(port) ? ":" : StringUtils.EMPTY;
+        String webAppNameSlash = StringUtils.isNotEmpty(web) ? SLASH : StringUtils.EMPTY;
+        return prefix + host + portColon + port + webAppNameSlash + web + SLASH;
+    }
+
     /**
      * IPV6地址格式不同,处理字符串的方式不同,需要处理的是port和host
      * 形如  http://[XXXX::XXXX:XXXX:XXXX:XXXX]:8080/webroot/decision
      */
     public void refreshIPV6Format() {
         String url = this.url;
-        if (Strings.isNullOrEmpty(url)) {
+        if (StringUtils.isEmpty(url)) {
             return;
         }
         if (!url.contains(IPV6_JUDGE_SYMBOL) || !url.contains(IPV6_JUDGE_SYMBOL2)) {
diff --git a/designer-base/src/test/java/com/fr/env/RemoteWorkspaceURLTest.java b/designer-base/src/test/java/com/fr/env/RemoteWorkspaceURLTest.java
index b9412a93d5..beea265b5d 100644
--- a/designer-base/src/test/java/com/fr/env/RemoteWorkspaceURLTest.java
+++ b/designer-base/src/test/java/com/fr/env/RemoteWorkspaceURLTest.java
@@ -243,6 +243,24 @@ public class RemoteWorkspaceURLTest {
         //others begin
     }
 
+    @Test
+    public void testStandardURL(){
+        assertEquals("https://www.baidu.com/web/",
+                new RemoteWorkspaceURL("https://www.baidu.com/web//dfsaf/fdsafds").getStandardURL());
+
+        assertEquals("https://www.baidu.com/中文·o((⊙﹏⊙))o囖/",
+                new RemoteWorkspaceURL("https://www.baidu.com/中文·o((⊙﹏⊙))o囖//dfsaf/fdsafds").getStandardURL());
+
+        assertEquals("https://www.baidu.com/web/",
+                new RemoteWorkspaceURL("https://www.baidu.com/web").getStandardURL());
+
+        assertEquals("https://www.baidu.com/web/",
+                new RemoteWorkspaceURL("https://www.baidu.com/web//").getStandardURL());
+
+        assertEquals("https://www.baidu.com/web/",
+                new RemoteWorkspaceURL("https://www.baidu.com/web/servlet").getStandardURL());
+    }
+
     @Test
     public void testIPV6Url() {
         String trueUrl = "http://[fe80::4d83:cc10:9f6f:3303]:8080/webroot/decision";