From 51d6fbe40dfd019f51d4b2fa840fa4712a585e99 Mon Sep 17 00:00:00 2001 From: zhangshuai Date: Tue, 20 Jun 2023 10:01:52 +0800 Subject: fix: NEZ-2888 修复 UrlBuilder 对特殊字符 "%" 未编码问题 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nis/modules/agent/util/AgentUtil.java | 40 ++++++++++++++++++---- .../java/com/nis/modules/agent/util/TalonUtil.java | 27 ++++++++++++--- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/nz-admin/src/main/java/com/nis/modules/agent/util/AgentUtil.java b/nz-admin/src/main/java/com/nis/modules/agent/util/AgentUtil.java index 011ea234..8bd9aaef 100644 --- a/nz-admin/src/main/java/com/nis/modules/agent/util/AgentUtil.java +++ b/nz-admin/src/main/java/com/nis/modules/agent/util/AgentUtil.java @@ -18,6 +18,7 @@ import com.nis.common.utils.Tool; import com.nis.modules.agent.entity.Agent; import com.nis.modules.agent.service.PromApiService; import com.nis.modules.sys.service.SysConfigService; +import com.sun.javafx.fxml.builder.URLBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -39,6 +40,7 @@ import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -82,9 +84,18 @@ public class AgentUtil { String agentPath = sysConfigService.getValueOrDefault(Constant.CONFAGENT_PATH, ""); path = path.startsWith("/") ? (String.format("%s%s", agentPath, path)) : (String.format("%s/%s", agentPath, path)); - String urlString = UrlBuilder.create().setScheme(server.getProtocol()).setHost(server.getHost()) + /*String urlString = UrlBuilder.create().setScheme(server.getProtocol()).setHost(server.getHost()) .setPort(server.getPort()).setPath(UrlPath.of(path, Charset.forName("UTF-8"))) - .setQuery(UrlQuery.of(queryString, Charset.forName("UTF-8"), false, true)).toString(); + .setQuery(UrlQuery.of(queryString, Charset.forName("UTF-8"), false, true)).toString();*/ + String urlString = new UrlBuilder( + server.getProtocol(), + server.getHost(), + Integer.valueOf(server.getPort()), + UrlPath.of(path, Charset.forName("UTF-8")), + UrlQuery.of(queryString, Charset.forName("UTF-8"), false, true), + null, + StandardCharsets.UTF_8).toString(); + HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.AUTHORIZATION, server.getToken()); HttpEntity httpEntity = body == null ? new HttpEntity(headers) : new HttpEntity(body, headers); @@ -192,8 +203,16 @@ public class AgentUtil { * @return */ public static JSONObject getForObject(Agent server, String url, Map requestParam) { - UrlBuilder urlBuilder = UrlBuilder.create().setScheme(server.getProtocol()).setHost(server.getHost()) - .setPort(server.getPort()).setPath(UrlPath.of(url, Charset.forName("UTF-8"))); + /*UrlBuilder urlBuilder = UrlBuilder.create().setScheme(server.getProtocol()).setHost(server.getHost()) + .setPort(server.getPort()).setPath(UrlPath.of(url, Charset.forName("UTF-8")));*/ + + UrlBuilder urlBuilder = new UrlBuilder(server.getProtocol(), + server.getHost(), + Integer.valueOf(server.getPort()), + UrlPath.of(url, Charset.forName("UTF-8")), + null, + null, + StandardCharsets.UTF_8); UrlQuery urlQuery = new UrlQuery(true); Iterator> iterator = ((Map) requestParam).entrySet().iterator(); @@ -348,9 +367,18 @@ public class AgentUtil { queryString = StrUtil.isNotBlank(queryString) ? queryString : ""; queryString = URLUtil.decode(queryString); - String urlStr = UrlBuilder.create().setScheme(server.getProtocol()).setHost(server.getHost()) + /*String urlStr = UrlBuilder.create().setScheme(server.getProtocol()).setHost(server.getHost()) .setPort(server.getPort()).setPath(UrlPath.of(url, Charset.forName("UTF-8"))) - .setQuery(UrlQuery.of(queryString, Charset.forName("UTF-8"), false, true)).toString(); + .setQuery(UrlQuery.of(queryString, Charset.forName("UTF-8"), false, true)).toString();*/ + + String urlStr = new UrlBuilder( + server.getProtocol(), + server.getHost(), + Integer.valueOf(server.getPort()), + UrlPath.of(url, Charset.forName("UTF-8")), + UrlQuery.of(queryString, Charset.forName("UTF-8"), false, true), + null, + StandardCharsets.UTF_8).toString(); String method = request.getMethod(); ResponseEntity exchange = restTemplate.exchange(new URI(urlStr), HttpMethod.resolve(method), diff --git a/nz-admin/src/main/java/com/nis/modules/agent/util/TalonUtil.java b/nz-admin/src/main/java/com/nis/modules/agent/util/TalonUtil.java index 5e48e5a2..4fb8c492 100644 --- a/nz-admin/src/main/java/com/nis/modules/agent/util/TalonUtil.java +++ b/nz-admin/src/main/java/com/nis/modules/agent/util/TalonUtil.java @@ -20,6 +20,7 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.*; @Configuration @@ -118,12 +119,21 @@ public class TalonUtil { // build urlQuery UrlQuery urlQuery = TalonUtil.buildUrlQuery(requestParam); - UrlBuilder urlBuilder = UrlBuilder.create() + /*UrlBuilder urlBuilder = UrlBuilder.create() .setScheme("http") .setHost(targetUrl.split(":")[0]) .setPort(Integer.valueOf(targetUrl.split(":")[1])) .setQuery(urlQuery) - .setPath(UrlPath.of(String.format("%s%s", "/nz-talon", path), Charset.forName("UTF-8"))); + .setPath(UrlPath.of(String.format("%s%s", "/nz-talon", path), Charset.forName("UTF-8")));*/ + + UrlBuilder urlBuilder = new UrlBuilder( + "http", + targetUrl.split(":")[0], + Integer.valueOf(targetUrl.split(":")[1]), + UrlPath.of(String.format("%s%s", "/nz-talon", path), Charset.forName("UTF-8")), + urlQuery, + null, + StandardCharsets.UTF_8); String urlStr = urlBuilder.build(); HttpHeaders headers = new HttpHeaders(); @@ -157,12 +167,21 @@ public class TalonUtil { Agent server = promApiService.getOneAvaliableGlobalAgent(); String agentPath = sysConfigService.getValue(Constant.CONFAGENT_PATH); - UrlBuilder urlBuilder = UrlBuilder.create() + /*UrlBuilder urlBuilder = UrlBuilder.create() .setScheme(server.getProtocol()) .setHost(server.getHost()) .setPort(server.getPort()) .setQuery(urlQuery) - .setPath(UrlPath.of(String.format("%s%s%s", agentPath, "/talon/proxy", path), Charset.forName("UTF-8"))); + .setPath(UrlPath.of(String.format("%s%s%s", agentPath, "/talon/proxy", path), Charset.forName("UTF-8")));*/ + + UrlBuilder urlBuilder = new UrlBuilder( + server.getProtocol(), + server.getHost(), + Integer.valueOf(server.getPort()), + UrlPath.of(String.format("%s%s%s", agentPath, "/talon/proxy", path), Charset.forName("UTF-8")), + urlQuery, + null, + StandardCharsets.UTF_8); String urlStr = urlBuilder.build(); HttpHeaders headers = new HttpHeaders(); -- cgit v1.2.3