Explorar o código

feat(系统配置): base-path值正确性校验 (#318)

bestfeng1020 %!s(int64=2) %!d(string=hai) anos
pai
achega
db1df5e121

+ 11 - 1
jetlinks-components/common-component/src/main/java/org/jetlinks/community/config/verification/ConfigVerificationService.java

@@ -13,6 +13,7 @@ import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
+import java.net.URI;
 import java.net.UnknownHostException;
 import java.time.Duration;
 import java.util.Objects;
@@ -58,9 +59,18 @@ public class ConfigVerificationService {
         if (basePath == null) {
             return Mono.empty();
         }
+
+        URI uri = URI.create(CastUtils.castString(CastUtils.castString(basePath).concat(PATH_VERIFICATION_URI)));
+        if (Objects.equals(uri.getHost(), "127.0.0.1")){
+            return Mono.defer(() -> Mono.error(new BusinessException("error.base_path_host_error", 500, "127.0.0.1")));
+        }
+        if (Objects.equals(uri.getHost(), "localhost")){
+            return Mono.defer(() -> Mono.error(new BusinessException("error.base_path_host_error", 500, "localhost")));
+        }
+
         return webClient
             .get()
-            .uri(CastUtils.castString(basePath).concat(PATH_VERIFICATION_URI))
+            .uri(uri)
             .exchangeToMono(cr -> {
                 if (cr.statusCode().is2xxSuccessful()
                     && Objects.equals(cr.headers().asHttpHeaders().getFirst("auth"), PATH_VERIFICATION_URI)) {

+ 4 - 1
jetlinks-components/common-component/src/main/resources/i18n/common-component/messages_en.properties

@@ -7,4 +7,7 @@ error.base_path_error=base-path error. \
 error.base_path_DNS_resolution_failed=base-path DNS resolution failed\u3002\
   format\uFF1A{http/https}: //{IP address of the server where the front-end is located}:{Front end exposed service port}/api
 error.base_path_validate_request_timeout=base-path validate request timeout\u3002\
-  format\uFF1A{http/https}: //{IP address of the server where the front-end is located}:{Front end exposed service port}/api
+  format\uFF1A{http/https}: //{IP address of the server where the front-end is located}:{Front end exposed service port}/api
+
+error.base_path_host_error=The HOST for base-path cannot be: {0}, please use an intranet IP address. \
+  example: 192.168. x.x

+ 2 - 1
jetlinks-components/common-component/src/main/resources/i18n/common-component/messages_zh.properties

@@ -3,4 +3,5 @@ error.data.referenced=\u6570\u636E\u5DF2\u7ECF\u88AB\u5176\u4ED6\u5730\u65B9\u4F
 error.duplicate_key_detail=\u91CD\u590D\u7684\u6570\u636E:{0}
 error.base_path_error=base-path\u9519\u8BEF\u3002 \u6B63\u786E\u683C\u5F0F\uFF1A{http/https}: //{\u524D\u7AEF\u6240\u5728\u670D\u52A1\u5668IP\u5730\u5740}:{\u524D\u7AEF\u66B4\u9732\u7684\u670D\u52A1\u7AEF\u53E3}/api
 error.base_path_DNS_resolution_failed=base-path DNS\u89E3\u6790\u5931\u8D25\u3002\u6B63\u786E\u683C\u5F0F\uFF1A{http/https}: //{\u524D\u7AEF\u6240\u5728\u670D\u52A1\u5668IP\u5730\u5740}:{\u524D\u7AEF\u66B4\u9732\u7684\u670D\u52A1\u7AEF\u53E3}/api
-error.base_path_validate_request_timeout=base-path \u8BF7\u6C42\u9A8C\u8BC1\u8D85\u65F6\u3002\u6B63\u786E\u683C\u5F0F\uFF1A{http/https}: //{\u524D\u7AEF\u6240\u5728\u670D\u52A1\u5668IP\u5730\u5740}:{\u524D\u7AEF\u66B4\u9732\u7684\u670D\u52A1\u7AEF\u53E3}/api
+error.base_path_validate_request_timeout=base-path \u8BF7\u6C42\u9A8C\u8BC1\u8D85\u65F6\u3002\u6B63\u786E\u683C\u5F0F\uFF1A{http/https}: //{\u524D\u7AEF\u6240\u5728\u670D\u52A1\u5668IP\u5730\u5740}:{\u524D\u7AEF\u66B4\u9732\u7684\u670D\u52A1\u7AEF\u53E3}/api
+error.base_path_host_error=base-path\u7684HOST\u4E0D\u80FD\u4E3A:{0}\uFF0C\u8BF7\u4F7F\u7528\u5185\u7F51IP\u5730\u5740\u3002\u5982\uFF1A192.168.x.x