diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 88ab866..caf8774 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,5 @@
# docker镜像
-image: git.mesalab.cn:7443/nezha/nz-build-env:1.3
+image: git.mesalab.cn:7443/nezha/nz-build-env:1.5
# 定义全局变量
variables:
MINIO_HOST: 'http://192.168.40.48:2020/'
diff --git a/pom.xml b/pom.xml
index 6bd3670..d1e3ad2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.4.4
+ 3.1.3
net.geedge
@@ -15,7 +15,7 @@
nz-agent
nezha prometheus config sync agent
- 1.8
+ 21
2.17.0
1.3.1
@@ -28,6 +28,7 @@
org.projectlombok
lombok
+ 1.18.30
true
@@ -53,6 +54,7 @@
org.apache.httpcomponents
httpclient
+ 4.5.13
org.springframework.boot
@@ -70,11 +72,6 @@
${commons.fileupload.version}
-
- org.apache.httpcomponents
- httpmime
-
-
org.snmp4j
@@ -88,6 +85,13 @@
reactive-streams
+
+
+ org.apache.httpcomponents.client5
+ httpclient5
+ 5.1.3
+
+
@@ -118,10 +122,9 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.2
+ 3.11.0
- 8
- 8
+ ${java.version}
UTF-8
diff --git a/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java b/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java
index 2813801..937afd1 100644
--- a/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java
+++ b/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java
@@ -1,22 +1,23 @@
package net.geedge.confagent.config;
-import org.apache.http.HeaderElement;
-import org.apache.http.HeaderElementIterator;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.socket.ConnectionSocketFactory;
-import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.hc.client5.http.ConnectionKeepAliveStrategy;
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.client5.http.config.RequestConfig;
+import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
+import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
+import org.apache.hc.core5.http.HeaderElement;
+import org.apache.hc.core5.http.HttpResponse;
+import org.apache.hc.core5.http.config.Registry;
+import org.apache.hc.core5.http.config.RegistryBuilder;
+import org.apache.hc.core5.http.message.BasicHeaderElementIterator;
+import org.apache.hc.core5.http.protocol.HttpContext;
+import org.apache.hc.core5.util.TimeValue;
+import org.apache.hc.core5.util.Timeout;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.apache.http.message.BasicHeaderElementIterator;
import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
@@ -119,9 +120,9 @@ public class RestTemplateConfig {
connectionManager.setMaxTotal(maxTotal);
// 路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(maxPerRoute);
- RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout)// 服务器返回数据(response)的时间,超过该时间抛出readtimeout
- .setConnectTimeout(connectionTimeout)// 连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
- .setConnectionRequestTimeout(connectionRequestTimeout)// 从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException:Timeout
+ RequestConfig requestConfig = RequestConfig.custom().setResponseTimeout(Timeout.ofMilliseconds(socketTimeout))// 服务器返回数据(response)的时间,超过该时间抛出readtimeout
+ .setConnectTimeout(Timeout.ofMilliseconds(connectionTimeout))// 连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
+ .setConnectionRequestTimeout(Timeout.ofMilliseconds(connectionRequestTimeout))// 从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException:Timeout
// waiting for connection from pool
.build();
return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager)
@@ -137,22 +138,20 @@ public class RestTemplateConfig {
public ConnectionKeepAliveStrategy connectionKeepAliveStrategy() {
return new ConnectionKeepAliveStrategy() {
@Override
- public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
- // Honor 'keep-alive' header
- HeaderElementIterator it = new BasicHeaderElementIterator(
- response.headerIterator(HTTP.CONN_KEEP_ALIVE));
+ public TimeValue getKeepAliveDuration(HttpResponse httpResponse, HttpContext httpContext) {
+ BasicHeaderElementIterator it = new BasicHeaderElementIterator(httpResponse.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
- HeaderElement he = it.nextElement();
- String param = he.getName();
- String value = he.getValue();
+ HeaderElement next = it.next();
+ String param = next.getName();
+ String value = next.getValue();
if (value != null && "timeout".equalsIgnoreCase(param)) {
try {
- return Long.parseLong(value) * 1000;
- } catch (NumberFormatException ignore) {
+ return TimeValue.ofMilliseconds(Integer.valueOf(value) * 1000);
+ } catch (NumberFormatException e) {
}
}
}
- return keepAliveTime * 1000;
+ return TimeValue.ofMilliseconds(keepAliveTime * 1000);
}
};
}
diff --git a/src/main/java/net/geedge/confagent/controller/ConfigController.java b/src/main/java/net/geedge/confagent/controller/ConfigController.java
index 81268d3..d64f640 100644
--- a/src/main/java/net/geedge/confagent/controller/ConfigController.java
+++ b/src/main/java/net/geedge/confagent/controller/ConfigController.java
@@ -19,8 +19,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;
diff --git a/src/main/java/net/geedge/confagent/controller/CortexController.java b/src/main/java/net/geedge/confagent/controller/CortexController.java
index 9ef0caf..4d9073d 100644
--- a/src/main/java/net/geedge/confagent/controller/CortexController.java
+++ b/src/main/java/net/geedge/confagent/controller/CortexController.java
@@ -22,8 +22,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URI;
import java.nio.charset.Charset;
diff --git a/src/main/java/net/geedge/confagent/controller/HealthyController.java b/src/main/java/net/geedge/confagent/controller/HealthyController.java
index 3e043ae..6595bb0 100644
--- a/src/main/java/net/geedge/confagent/controller/HealthyController.java
+++ b/src/main/java/net/geedge/confagent/controller/HealthyController.java
@@ -4,7 +4,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/java/net/geedge/confagent/controller/LokiController.java b/src/main/java/net/geedge/confagent/controller/LokiController.java
index bebc260..563799a 100644
--- a/src/main/java/net/geedge/confagent/controller/LokiController.java
+++ b/src/main/java/net/geedge/confagent/controller/LokiController.java
@@ -10,10 +10,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -189,7 +189,7 @@ public class LokiController extends BaseController {
}
public void requestLoki(String lokiPath, String token, HttpServletRequest request, HttpServletResponse response) {
- String queryString = ReflectUtil.invoke(request, "getQueryString");
+ String queryString = request.getQueryString();
String targetUrl = String.format("%s:%s%s?%s", "127.0.0.1", 13100, lokiPath,Tool.StrUtil.emptyToDefault(queryString, ""));
String url = UrlBuilder.ofHttp(targetUrl, Charset.forName("utf-8")).toString();
@@ -227,7 +227,11 @@ public class LokiController extends BaseController {
String responseMessage = conn.getResponseMessage();
Map> responseHeaders = conn.getHeaderFields();
response.reset();
- response.setStatus(responseCode, responseMessage);
+
+ response.setStatus(responseCode);
+ if (responseCode > 400) {
+ response.sendError(responseCode, responseMessage);
+ }
// 复制响应头
for (Map.Entry> en : responseHeaders.entrySet()) {
String key = en.getKey();
diff --git a/src/main/java/net/geedge/confagent/controller/OTAController.java b/src/main/java/net/geedge/confagent/controller/OTAController.java
index 48c7100..9a718e7 100644
--- a/src/main/java/net/geedge/confagent/controller/OTAController.java
+++ b/src/main/java/net/geedge/confagent/controller/OTAController.java
@@ -1,6 +1,7 @@
package net.geedge.confagent.controller;
import cn.hutool.log.Log;
+import jakarta.servlet.http.HttpServletRequest;
import net.geedge.confagent.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -9,8 +10,10 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import javax.servlet.http.HttpServletRequest;
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
@RestController
public class OTAController extends BaseController{
diff --git a/src/main/java/net/geedge/confagent/controller/PrometheusController.java b/src/main/java/net/geedge/confagent/controller/PrometheusController.java
index 0521638..ca3bc8a 100644
--- a/src/main/java/net/geedge/confagent/controller/PrometheusController.java
+++ b/src/main/java/net/geedge/confagent/controller/PrometheusController.java
@@ -1,47 +1,36 @@
package net.geedge.confagent.controller;
+import cn.hutool.core.net.url.UrlBuilder;
+import cn.hutool.core.net.url.UrlPath;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.URLUtil;
+import cn.hutool.http.HttpConnection;
+import cn.hutool.log.Log;
+import io.micrometer.core.instrument.Metrics;
+import io.micrometer.core.instrument.Tags;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import net.geedge.confagent.annotation.UnCheckToken;
+import net.geedge.confagent.util.ConfagentUtil;
+import net.geedge.confagent.util.R;
+import net.geedge.confagent.util.RCode;
+import net.geedge.confagent.util.Tool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.client.RestTemplate;
-
-import cn.hutool.core.net.url.UrlBuilder;
-import cn.hutool.core.net.url.UrlPath;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.ReflectUtil;
-import cn.hutool.core.util.URLUtil;
-import cn.hutool.http.HttpConnection;
-import cn.hutool.log.Log;
-import io.micrometer.core.instrument.Metrics;
-import io.micrometer.core.instrument.Tags;
-import net.geedge.confagent.annotation.UnCheckToken;
-import net.geedge.confagent.util.ConfagentUtil;
-import net.geedge.confagent.util.R;
-import net.geedge.confagent.util.RCode;
-import net.geedge.confagent.util.Tool;
+import java.util.*;
@RestController
@RequestMapping("/prometheus")
@@ -179,7 +168,7 @@ public class PrometheusController extends BaseController{
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String hn = headerNames.nextElement();
- ReflectUtil.invoke(conn,"addRequestProperty",hn,request.getHeader(hn));
+ conn.addRequestProperty(hn,request.getHeader(hn));
}
if (!"GET".equalsIgnoreCase(method)) {
conn.setDoOutput(true);
@@ -193,13 +182,17 @@ public class PrometheusController extends BaseController{
connInputStream = (responseCode < 400)? conn.getInputStream():conn.getErrorStream();
String responseMessage = conn.getResponseMessage();
Map> responseHeaders = conn.getHeaderFields();
- response.setStatus(responseCode, responseMessage);
+
+ response.setStatus(responseCode);
+ if (responseCode > 400) {
+ response.sendError(responseCode, responseMessage);
+ }
//复制响应头
for(Map.Entry> en : responseHeaders.entrySet()) {
String key = en.getKey();
if (Tool.StrUtil.isEmpty(key) || "Transfer-Encoding".equals(key)) continue;
List value = en.getValue();
- ReflectUtil.invoke(response,"addHeader",key,Tool.StrUtil.join("; ",value));
+ response.addHeader(key, Tool.StrUtil.join("; ",value));
}
Tool.IoUtil.copy(connInputStream, resOutputStream);
diff --git a/src/main/java/net/geedge/confagent/controller/TalonProxyController.java b/src/main/java/net/geedge/confagent/controller/TalonProxyController.java
index 3b11d38..76796a5 100644
--- a/src/main/java/net/geedge/confagent/controller/TalonProxyController.java
+++ b/src/main/java/net/geedge/confagent/controller/TalonProxyController.java
@@ -9,6 +9,8 @@ import cn.hutool.core.util.URLUtil;
import cn.hutool.http.Header;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONObject;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
@@ -26,10 +28,8 @@ import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+import org.springframework.web.multipart.support.StandardServletMultipartResolver;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.List;
@@ -232,8 +232,7 @@ public class TalonProxyController extends BaseController {
// talon token
headers.add(HttpHeaders.AUTHORIZATION, targetToken);
- CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
- commonsMultipartResolver.setDefaultEncoding("UTF-8");
+ StandardServletMultipartResolver commonsMultipartResolver = new StandardServletMultipartResolver();
if (commonsMultipartResolver.isMultipart(request)) {
MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
diff --git a/src/main/java/net/geedge/confagent/interceptor/TokenInterceptor.java b/src/main/java/net/geedge/confagent/interceptor/TokenInterceptor.java
index c2965b2..f95d7cf 100644
--- a/src/main/java/net/geedge/confagent/interceptor/TokenInterceptor.java
+++ b/src/main/java/net/geedge/confagent/interceptor/TokenInterceptor.java
@@ -1,22 +1,20 @@
package net.geedge.confagent.interceptor;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.HandlerInterceptor;
-
import cn.hutool.log.Log;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import java.io.IOException;
+import java.io.PrintWriter;
@Component
public class TokenInterceptor implements HandlerInterceptor {
diff --git a/src/main/java/net/geedge/confagent/util/ConfagentUtil.java b/src/main/java/net/geedge/confagent/util/ConfagentUtil.java
index f828a32..5837d85 100644
--- a/src/main/java/net/geedge/confagent/util/ConfagentUtil.java
+++ b/src/main/java/net/geedge/confagent/util/ConfagentUtil.java
@@ -1,5 +1,12 @@
package net.geedge.confagent.util;
+import cn.hutool.core.io.IORuntimeException;
+import cn.hutool.log.Log;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -8,15 +15,6 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
-
-import cn.hutool.core.io.IORuntimeException;
-import cn.hutool.log.Log;
-
@Configuration
@Order(value = 1)
public class ConfagentUtil {