From b7518b3ffd08f5091cb15d0e0c96acc14b9ae1cd Mon Sep 17 00:00:00 2001 From: ztzh_xieyun Date: Fri, 10 May 2024 10:01:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=A4=E6=96=AD,=E4=B8=8D=E8=B5=B0=E5=8A=A0?= =?UTF-8?q?=E8=A7=A3=E5=AF=86=E7=86=94=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sf/vertx/handle/AppConfigHandle.java | 12 ++++++++++++ .../com/sf/vertx/handle/BodyHandlerImpl.java | 8 ++------ .../io/vertx/httpproxy/impl/ReverseProxy.java | 18 ++++-------------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/sf-vertx/src/main/java/com/sf/vertx/handle/AppConfigHandle.java b/sf-vertx/src/main/java/com/sf/vertx/handle/AppConfigHandle.java index 9416f81..64b1f51 100644 --- a/sf-vertx/src/main/java/com/sf/vertx/handle/AppConfigHandle.java +++ b/sf-vertx/src/main/java/com/sf/vertx/handle/AppConfigHandle.java @@ -31,6 +31,7 @@ import io.vertx.circuitbreaker.CircuitBreaker; import io.vertx.circuitbreaker.CircuitBreakerOptions; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; +import io.vertx.core.http.HttpHeaders; import lombok.extern.slf4j.Slf4j; /*** @@ -93,6 +94,17 @@ public class AppConfigHandle { return APICODE_CONFIG_CIRCUIT_BREAKER_MAP.get(key); } + /*** + * 是否解析, 走独立请求 + * @return + */ + public static boolean isAnalysisBody(String appCode, String apiCode, String contentType) { + String keyCircuitBreaker = appCode + ":" + apiCode + ":" + "CIRCUIT_BREAKER"; + CircuitBreaker circuitBreaker = AppConfigHandle.getApiCodeCircuitBreaker(keyCircuitBreaker); + boolean isDataSecurity = AppConfigHandle.isDataSecurity(appCode); + // 文件上传不走加解密 + return (isDataSecurity || circuitBreaker != null) && StringUtils.startsWith(contentType, "multipart") == false; + } /*** * 优先apicode配置限流、无法找到匹配全局限流 * diff --git a/sf-vertx/src/main/java/com/sf/vertx/handle/BodyHandlerImpl.java b/sf-vertx/src/main/java/com/sf/vertx/handle/BodyHandlerImpl.java index f3b69bc..2e4fcc6 100644 --- a/sf-vertx/src/main/java/com/sf/vertx/handle/BodyHandlerImpl.java +++ b/sf-vertx/src/main/java/com/sf/vertx/handle/BodyHandlerImpl.java @@ -80,15 +80,11 @@ public class BodyHandlerImpl implements BodyHandler { final HttpServerResponse response = context.response(); String appCode = context.request().headers().get(AppConfigHandle.getAppCodeHeaderKey()); String apiCode = context.request().headers().get(AppConfigHandle.getApiCodeHeaderKey()); - // 判断
- // 1、是否配置全局加解密.
- // 2、apiCode 配置熔断 - String keyCircuitBreaker = appCode + ":" + apiCode + ":" + "CIRCUIT_BREAKER"; + String contentType = context.request().headers().get(HttpHeaders.CONTENT_TYPE); boolean isLoadBody = false; try { // TODO 测试异常 - isLoadBody = AppConfigHandle.isDataSecurity(appCode) - || AppConfigHandle.isApiCodeCircuitBreaker(keyCircuitBreaker); + isLoadBody = AppConfigHandle.isAnalysisBody(appCode, apiCode, contentType); } catch (Exception e) { e.printStackTrace(); context.fail(new HttpException(SacErrorCode.DEFAULT_ERROR_CODE)); diff --git a/sf-vertx/src/main/java/io/vertx/httpproxy/impl/ReverseProxy.java b/sf-vertx/src/main/java/io/vertx/httpproxy/impl/ReverseProxy.java index 81d7043..5584e2b 100644 --- a/sf-vertx/src/main/java/io/vertx/httpproxy/impl/ReverseProxy.java +++ b/sf-vertx/src/main/java/io/vertx/httpproxy/impl/ReverseProxy.java @@ -387,24 +387,14 @@ public class ReverseProxy implements HttpProxy { // 2、apiCode 配置熔断 String appCode = proxyRequest.headers().get(AppConfigHandle.getAppCodeHeaderKey()); String apiCode = proxyRequest.headers().get(AppConfigHandle.getApiCodeHeaderKey()); + String contentType = proxyRequest.headers().get(HttpHeaders.CONTENT_TYPE); String keyCircuitBreaker = appCode + ":" + apiCode + ":" + "CIRCUIT_BREAKER"; CircuitBreaker circuitBreaker = AppConfigHandle.getApiCodeCircuitBreaker(keyCircuitBreaker); - boolean isDataSecurity = AppConfigHandle.isDataSecurity(appCode); - if (isDataSecurity || circuitBreaker != null) { + if (AppConfigHandle.isAnalysisBody(appCode, apiCode, contentType)) { try { - if (isDataSecurity && circuitBreaker != null) { - // 加解密,只支持application/json - String contentType = proxyRequest.headers().get(HttpHeaders.CONTENT_TYPE); - if(StringUtils.equals(contentType, "application/json") == false) { - throw new HttpException(10019); - } + if (AppConfigHandle.isDataSecurity(appCode) && circuitBreaker != null) { return breakerAndSecurity(circuitBreaker, proxyRequest); - } else if (isDataSecurity) { - // 加解密,只支持application/json - String contentType = proxyRequest.headers().get(HttpHeaders.CONTENT_TYPE); - if(StringUtils.equals(contentType, "application/json") == false) { - throw new HttpException(10019); - } + } else if (AppConfigHandle.isDataSecurity(appCode)) { return security(circuitBreaker, proxyRequest); } else if (circuitBreaker != null) { return breaker(circuitBreaker, proxyRequest);