From 9ea120037ec1724242062d828e05bad9aeaf9a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=B0=8F=E5=90=8D=E7=9A=84=E6=9B=B2?= <951012707@qq.com> Date: Tue, 4 Jun 2024 11:16:21 +0800 Subject: [PATCH 1/2] fix: Split out user restclient, remove default header --- .../com/ly/ckibana/configure/config/ProxyConfigLoader.java | 2 +- src/main/java/com/ly/ckibana/constants/Constants.java | 4 ++++ src/main/java/com/ly/ckibana/handlers/BaseHandler.java | 4 ++++ src/main/java/com/ly/ckibana/model/request/ProxyConfig.java | 5 ++++- src/main/java/com/ly/ckibana/service/BlackSqlService.java | 4 ++-- src/main/java/com/ly/ckibana/service/EsClientUtil.java | 5 ++++- src/main/java/com/ly/ckibana/util/RestUtils.java | 4 ++-- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java b/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java index 939b3b4..a561564 100644 --- a/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java +++ b/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java @@ -204,7 +204,7 @@ public void updateProxyConfigMap(KibanaProperty newKibanaProperty) { try { proxyConfig.getRestClient().close(); // create a new es client - proxyConfig.setRestClient(RestUtils.initEsResClient(this.kibanaProperty.getProxy().getEs())); + proxyConfig.setRestClient(RestUtils.initEsResClient(this.kibanaProperty.getProxy().getEs(), true)); } catch (IOException e) { log.error("close rest client error.", e); } diff --git a/src/main/java/com/ly/ckibana/constants/Constants.java b/src/main/java/com/ly/ckibana/constants/Constants.java index c4f895a..d9cd82f 100644 --- a/src/main/java/com/ly/ckibana/constants/Constants.java +++ b/src/main/java/com/ly/ckibana/constants/Constants.java @@ -226,4 +226,8 @@ public static class IndexBuilder { public static final String BULK_INDEX_NO_TYPE_HEADER = "{ \"index\": { \"_index\" : \"%s\", \"_id\": \"%s\"}}"; } + + public static class Headers { + public static final String AUTHORIZATION = "authorization"; + } } diff --git a/src/main/java/com/ly/ckibana/handlers/BaseHandler.java b/src/main/java/com/ly/ckibana/handlers/BaseHandler.java index 41e9979..0bfcbbf 100644 --- a/src/main/java/com/ly/ckibana/handlers/BaseHandler.java +++ b/src/main/java/com/ly/ckibana/handlers/BaseHandler.java @@ -133,6 +133,10 @@ private RequestContext build(HttpServletRequest request, HttpServletResponse res Map reqHeaders = HttpServletUtils.parseHttpRequestHeaders(request); Map defaultHeaders = proxyConfig.getKibanaItemProperty().getEs().getHeaders(); defaultHeaders.forEach((dhn, dhv) -> { + if (dhn.equalsIgnoreCase(Constants.Headers.AUTHORIZATION)) { + return; + } + for (String headerName : reqHeaders.keySet()) { if (headerName.equalsIgnoreCase(dhn)) { reqHeaders.put(headerName, new BasicHeader(headerName, dhv)); diff --git a/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java b/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java index 6871fca..377da15 100644 --- a/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java +++ b/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java @@ -48,13 +48,16 @@ public class ProxyConfig { private RestClient restClient; + private RestClient userRestClient; + private EsProxyClientConsumer esClientBuffer; private BalancedClickhouseDataSource ckDatasource; public ProxyConfig(KibanaItemProperty kibanaItemProperty) { this.kibanaItemProperty = kibanaItemProperty; - this.restClient = RestUtils.initEsResClient(kibanaItemProperty.getEs()); + this.restClient = RestUtils.initEsResClient(kibanaItemProperty.getEs(), true); + this.userRestClient = RestUtils.initEsResClient(kibanaItemProperty.getEs(), false); this.esClientBuffer = new EsProxyClientConsumer(); if (kibanaItemProperty.getCk() != null) { this.ckDatasource = CkService.initDatasource(kibanaItemProperty.getCk()); diff --git a/src/main/java/com/ly/ckibana/service/BlackSqlService.java b/src/main/java/com/ly/ckibana/service/BlackSqlService.java index e368c49..8a0bcd9 100644 --- a/src/main/java/com/ly/ckibana/service/BlackSqlService.java +++ b/src/main/java/com/ly/ckibana/service/BlackSqlService.java @@ -61,11 +61,11 @@ public String addBlackSql(long range, String sql) { } public String removeBlackSql(String id) { - return EsClientUtil.deleteSource(proxyConfigLoader.getMetadataRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, id); + return EsClientUtil.deleteSource(requestContext.getProxyConfig().getRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, id); } public String getList(int size) { - return EsClientUtil.search(proxyConfigLoader.getMetadataRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, String.format("{\"size\":%s}", size)); + return EsClientUtil.search(requestContext.getProxyConfig().getRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, String.format("{\"size\":%s}", size)); } public boolean isBlackSql(long range, String sql) { diff --git a/src/main/java/com/ly/ckibana/service/EsClientUtil.java b/src/main/java/com/ly/ckibana/service/EsClientUtil.java index 6d79ae1..0b6ee51 100644 --- a/src/main/java/com/ly/ckibana/service/EsClientUtil.java +++ b/src/main/java/com/ly/ckibana/service/EsClientUtil.java @@ -54,8 +54,11 @@ public class EsClientUtil { protected static final Header[] BASE_HEADER = new Header[]{new BasicHeader("Content-Type", "application/json")}; + /** + * 不指定则采用用户restclient + */ public static String doRequest(RequestContext context) throws Exception { - return doRequest(context.getProxyConfig().getRestClient(), context.getRequestInfo(), context.getHttpResponse()); + return doRequest(context.getProxyConfig().getUserRestClient(), context.getRequestInfo(), context.getHttpResponse()); } public static String doRequest(RestClient restClient, RequestContext.RequestInfo requestInfo, HttpServletResponse response) throws Exception { diff --git a/src/main/java/com/ly/ckibana/util/RestUtils.java b/src/main/java/com/ly/ckibana/util/RestUtils.java index 9f44470..bde2f99 100644 --- a/src/main/java/com/ly/ckibana/util/RestUtils.java +++ b/src/main/java/com/ly/ckibana/util/RestUtils.java @@ -75,9 +75,9 @@ public static String getClientIpAddr(HttpServletRequest request) { /** * 初始化es客户端. */ - public static RestClient initEsResClient(EsProperty item) { + public static RestClient initEsResClient(EsProperty item, boolean mergeDefaultHeader) { Map headersMap = new HashMap<>(); - if (!CollectionUtils.isEmpty(item.getHeaders())) { + if (!CollectionUtils.isEmpty(item.getHeaders()) && mergeDefaultHeader) { headersMap.putAll(item.getHeaders()); } return initEsRestClient(item.getHost(), headersMap); From 488fb5d6abc38860607469d95b321f91151d0db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=B0=8F=E5=90=8D=E7=9A=84=E6=9B=B2?= <951012707@qq.com> Date: Tue, 4 Jun 2024 11:18:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20Split=20out=C2=A0=20user=20restclien?= =?UTF-8?q?t,=20remove=20default=20header=20#44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ly/ckibana/configure/config/ProxyConfigLoader.java | 2 +- src/main/java/com/ly/ckibana/constants/Constants.java | 4 ++++ src/main/java/com/ly/ckibana/handlers/BaseHandler.java | 4 ++++ src/main/java/com/ly/ckibana/model/request/ProxyConfig.java | 5 ++++- src/main/java/com/ly/ckibana/service/BlackSqlService.java | 4 ++-- src/main/java/com/ly/ckibana/service/EsClientUtil.java | 5 ++++- src/main/java/com/ly/ckibana/util/RestUtils.java | 4 ++-- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java b/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java index 939b3b4..a561564 100644 --- a/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java +++ b/src/main/java/com/ly/ckibana/configure/config/ProxyConfigLoader.java @@ -204,7 +204,7 @@ public void updateProxyConfigMap(KibanaProperty newKibanaProperty) { try { proxyConfig.getRestClient().close(); // create a new es client - proxyConfig.setRestClient(RestUtils.initEsResClient(this.kibanaProperty.getProxy().getEs())); + proxyConfig.setRestClient(RestUtils.initEsResClient(this.kibanaProperty.getProxy().getEs(), true)); } catch (IOException e) { log.error("close rest client error.", e); } diff --git a/src/main/java/com/ly/ckibana/constants/Constants.java b/src/main/java/com/ly/ckibana/constants/Constants.java index c4f895a..d9cd82f 100644 --- a/src/main/java/com/ly/ckibana/constants/Constants.java +++ b/src/main/java/com/ly/ckibana/constants/Constants.java @@ -226,4 +226,8 @@ public static class IndexBuilder { public static final String BULK_INDEX_NO_TYPE_HEADER = "{ \"index\": { \"_index\" : \"%s\", \"_id\": \"%s\"}}"; } + + public static class Headers { + public static final String AUTHORIZATION = "authorization"; + } } diff --git a/src/main/java/com/ly/ckibana/handlers/BaseHandler.java b/src/main/java/com/ly/ckibana/handlers/BaseHandler.java index 41e9979..0bfcbbf 100644 --- a/src/main/java/com/ly/ckibana/handlers/BaseHandler.java +++ b/src/main/java/com/ly/ckibana/handlers/BaseHandler.java @@ -133,6 +133,10 @@ private RequestContext build(HttpServletRequest request, HttpServletResponse res Map reqHeaders = HttpServletUtils.parseHttpRequestHeaders(request); Map defaultHeaders = proxyConfig.getKibanaItemProperty().getEs().getHeaders(); defaultHeaders.forEach((dhn, dhv) -> { + if (dhn.equalsIgnoreCase(Constants.Headers.AUTHORIZATION)) { + return; + } + for (String headerName : reqHeaders.keySet()) { if (headerName.equalsIgnoreCase(dhn)) { reqHeaders.put(headerName, new BasicHeader(headerName, dhv)); diff --git a/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java b/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java index 6871fca..377da15 100644 --- a/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java +++ b/src/main/java/com/ly/ckibana/model/request/ProxyConfig.java @@ -48,13 +48,16 @@ public class ProxyConfig { private RestClient restClient; + private RestClient userRestClient; + private EsProxyClientConsumer esClientBuffer; private BalancedClickhouseDataSource ckDatasource; public ProxyConfig(KibanaItemProperty kibanaItemProperty) { this.kibanaItemProperty = kibanaItemProperty; - this.restClient = RestUtils.initEsResClient(kibanaItemProperty.getEs()); + this.restClient = RestUtils.initEsResClient(kibanaItemProperty.getEs(), true); + this.userRestClient = RestUtils.initEsResClient(kibanaItemProperty.getEs(), false); this.esClientBuffer = new EsProxyClientConsumer(); if (kibanaItemProperty.getCk() != null) { this.ckDatasource = CkService.initDatasource(kibanaItemProperty.getCk()); diff --git a/src/main/java/com/ly/ckibana/service/BlackSqlService.java b/src/main/java/com/ly/ckibana/service/BlackSqlService.java index e368c49..8a0bcd9 100644 --- a/src/main/java/com/ly/ckibana/service/BlackSqlService.java +++ b/src/main/java/com/ly/ckibana/service/BlackSqlService.java @@ -61,11 +61,11 @@ public String addBlackSql(long range, String sql) { } public String removeBlackSql(String id) { - return EsClientUtil.deleteSource(proxyConfigLoader.getMetadataRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, id); + return EsClientUtil.deleteSource(requestContext.getProxyConfig().getRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, id); } public String getList(int size) { - return EsClientUtil.search(proxyConfigLoader.getMetadataRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, String.format("{\"size\":%s}", size)); + return EsClientUtil.search(requestContext.getProxyConfig().getRestClient(), Constants.ConfigFile.BLACK_LIST_INDEX_NAME, String.format("{\"size\":%s}", size)); } public boolean isBlackSql(long range, String sql) { diff --git a/src/main/java/com/ly/ckibana/service/EsClientUtil.java b/src/main/java/com/ly/ckibana/service/EsClientUtil.java index 6d79ae1..0b6ee51 100644 --- a/src/main/java/com/ly/ckibana/service/EsClientUtil.java +++ b/src/main/java/com/ly/ckibana/service/EsClientUtil.java @@ -54,8 +54,11 @@ public class EsClientUtil { protected static final Header[] BASE_HEADER = new Header[]{new BasicHeader("Content-Type", "application/json")}; + /** + * 不指定则采用用户restclient + */ public static String doRequest(RequestContext context) throws Exception { - return doRequest(context.getProxyConfig().getRestClient(), context.getRequestInfo(), context.getHttpResponse()); + return doRequest(context.getProxyConfig().getUserRestClient(), context.getRequestInfo(), context.getHttpResponse()); } public static String doRequest(RestClient restClient, RequestContext.RequestInfo requestInfo, HttpServletResponse response) throws Exception { diff --git a/src/main/java/com/ly/ckibana/util/RestUtils.java b/src/main/java/com/ly/ckibana/util/RestUtils.java index 9f44470..bde2f99 100644 --- a/src/main/java/com/ly/ckibana/util/RestUtils.java +++ b/src/main/java/com/ly/ckibana/util/RestUtils.java @@ -75,9 +75,9 @@ public static String getClientIpAddr(HttpServletRequest request) { /** * 初始化es客户端. */ - public static RestClient initEsResClient(EsProperty item) { + public static RestClient initEsResClient(EsProperty item, boolean mergeDefaultHeader) { Map headersMap = new HashMap<>(); - if (!CollectionUtils.isEmpty(item.getHeaders())) { + if (!CollectionUtils.isEmpty(item.getHeaders()) && mergeDefaultHeader) { headersMap.putAll(item.getHeaders()); } return initEsRestClient(item.getHost(), headersMap);