This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 45da016 [type:refactor] optimize response & cryptor. (#2304)
45da016 is described below
commit 45da0168d933899595a215a09aa3c79ab88be3ce
Author: Qicz <[email protected]>
AuthorDate: Mon Nov 8 15:16:07 2021 +0800
[type:refactor] optimize response & cryptor. (#2304)
* [type:refactor] optimize response & cryptor.
* toggle ci again.
* optimize response util.
* optimize response util.
---
...ClientResponseUtils.java => ResponseUtils.java} | 63 +++++++++++++++++++---
...Decorator.java => CryptorRequestDecorator.java} | 13 ++---
...ecorator.java => CryptorResponseDecorator.java} | 27 +++++-----
.../cryptor/request/CryptorRequestPlugin.java | 22 ++++----
.../cryptor/response/CryptorResponsePlugin.java | 4 +-
.../utils/{HttpUtil.java => CryptorUtil.java} | 52 +-----------------
.../response/CryptorResponsePluginTest.java | 10 ++--
.../modify/response/ModifyResponsePlugin.java | 13 +++--
8 files changed, 100 insertions(+), 104 deletions(-)
diff --git
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/utils/ClientResponseUtils.java
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/utils/ResponseUtils.java
similarity index 57%
rename from
shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/utils/ClientResponseUtils.java
rename to
shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/utils/ResponseUtils.java
index 2e7b482..623275a 100644
---
a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/utils/ClientResponseUtils.java
+++
b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/utils/ResponseUtils.java
@@ -25,15 +25,31 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.reactive.function.client.ClientResponse;
+import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.Objects;
/**
- * ClientResponseUtils.
+ * ResponseUtils.
*/
-public final class ClientResponseUtils {
+public final class ResponseUtils {
+
+ private static final String CHUNKED = "chunked";
+
+ /**
+ * create CachedBodyOutputMessage.
+ *
+ * @param exchange ServerWebExchange
+ * @return CachedBodyOutputMessage.
+ */
+ public static CachedBodyOutputMessage newCachedBodyOutputMessage(final
ServerWebExchange exchange) {
+ HttpHeaders headers = new HttpHeaders();
+ headers.putAll(exchange.getRequest().getHeaders());
+ headers.remove(HttpHeaders.CONTENT_LENGTH);
+ return new CachedBodyOutputMessage(exchange, headers);
+ }
/**
* build client response with current response data.
@@ -58,12 +74,43 @@ public final class ClientResponseUtils {
*/
public static Mono<DataBuffer> fixBodyMessage(final ServerHttpResponse
response,
final
CachedBodyOutputMessage outputMessage) {
- Mono<DataBuffer> messageBody =
DataBufferUtils.join(outputMessage.getBody());
- HttpHeaders headers = response.getHeaders();
- if (!headers.containsKey(HttpHeaders.TRANSFER_ENCODING)
- || headers.containsKey(HttpHeaders.CONTENT_LENGTH)) {
- messageBody = messageBody.doOnNext(data ->
headers.setContentLength(data.readableByteCount()));
+ fixHeaders(response.getHeaders());
+ return DataBufferUtils.join(outputMessage.getBody());
+ }
+
+ /**
+ * release source.
+ * @param outputMessage CachedBodyOutputMessage
+ * @param throwable Throwable
+ * @return Mono.
+ */
+ public static Mono<Void> release(final CachedBodyOutputMessage
outputMessage, final Throwable throwable) {
+ if (outputMessage.getCache()) {
+ return
outputMessage.getBody().map(DataBufferUtils::release).then(Mono.error(throwable));
}
- return messageBody;
+ return Mono.error(throwable);
+ }
+
+ /**
+ * ChunkedHeader.
+ *
+ * @param headers headers.
+ * @return chunked headers
+ */
+ public static HttpHeaders chunkedHeader(final HttpHeaders headers) {
+ final HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.putAll(headers);
+ fixHeaders(httpHeaders);
+ return httpHeaders;
+ }
+
+ /**
+ * fix headers.
+ *
+ * @param httpHeaders the headers
+ */
+ private static void fixHeaders(final HttpHeaders httpHeaders) {
+ httpHeaders.remove(HttpHeaders.CONTENT_LENGTH);
+ httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, CHUNKED);
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/RequestDecorator.java
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/CryptorRequestDecorator.java
similarity index 78%
rename from
shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/RequestDecorator.java
rename to
shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/CryptorRequestDecorator.java
index edf3018..53c1aa1 100644
---
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/RequestDecorator.java
+++
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/CryptorRequestDecorator.java
@@ -18,7 +18,7 @@
package org.apache.shenyu.plugin.cryptor.decorator;
import org.apache.shenyu.plugin.base.support.CachedBodyOutputMessage;
-import org.apache.shenyu.plugin.cryptor.utils.HttpUtil;
+import org.apache.shenyu.plugin.base.utils.ResponseUtils;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
@@ -29,14 +29,14 @@ import reactor.util.annotation.NonNull;
/**
* Build and modify the request class.
*/
-public class RequestDecorator extends ServerHttpRequestDecorator {
+public class CryptorRequestDecorator extends ServerHttpRequestDecorator {
private final CachedBodyOutputMessage cachedBodyOutputMessage;
private final ServerWebExchange exchange;
- public RequestDecorator(final ServerWebExchange exchange,
- final CachedBodyOutputMessage
cachedBodyOutputMessage) {
+ public CryptorRequestDecorator(final ServerWebExchange exchange,
+ final CachedBodyOutputMessage
cachedBodyOutputMessage) {
super(exchange.getRequest());
this.cachedBodyOutputMessage = cachedBodyOutputMessage;
this.exchange = exchange;
@@ -51,9 +51,6 @@ public class RequestDecorator extends
ServerHttpRequestDecorator {
@Override
@NonNull
public HttpHeaders getHeaders() {
- HttpHeaders headers = new HttpHeaders();
- headers.putAll(exchange.getRequest().getHeaders());
- headers.remove(HttpHeaders.CONTENT_LENGTH);
- return HttpUtil.modifiedContentLength(headers);
+ return
ResponseUtils.chunkedHeader(this.exchange.getRequest().getHeaders());
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/ResponseDecorator.java
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/CryptorResponseDecorator.java
similarity index 76%
rename from
shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/ResponseDecorator.java
rename to
shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/CryptorResponseDecorator.java
index aa2b1d9..41c018c 100644
---
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/ResponseDecorator.java
+++
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/decorator/CryptorResponseDecorator.java
@@ -20,10 +20,10 @@ package org.apache.shenyu.plugin.cryptor.decorator;
import org.apache.shenyu.common.constant.Constants;
import org.apache.shenyu.plugin.base.support.BodyInserterContext;
import org.apache.shenyu.plugin.base.support.CachedBodyOutputMessage;
-import org.apache.shenyu.plugin.base.utils.ClientResponseUtils;
+import org.apache.shenyu.plugin.base.utils.ResponseUtils;
import org.apache.shenyu.plugin.cryptor.dto.CryptorRuleHandle;
import org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategyFactory;
-import org.apache.shenyu.plugin.cryptor.utils.HttpUtil;
+import org.apache.shenyu.plugin.cryptor.utils.CryptorUtil;
import org.apache.shenyu.plugin.cryptor.utils.JsonUtil;
import org.reactivestreams.Publisher;
import org.springframework.core.io.buffer.DataBuffer;
@@ -36,19 +36,20 @@ import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import reactor.util.annotation.NonNull;
+import java.util.Objects;
import java.util.function.Function;
/**
* Build and modify the response class.
*/
-public class ResponseDecorator extends ServerHttpResponseDecorator {
+public class CryptorResponseDecorator extends ServerHttpResponseDecorator {
private final ServerWebExchange exchange;
private final CryptorRuleHandle ruleHandle;
- public ResponseDecorator(final ServerWebExchange exchange,
- final CryptorRuleHandle ruleHandle) {
+ public CryptorResponseDecorator(final ServerWebExchange exchange,
+ final CryptorRuleHandle ruleHandle) {
super(exchange.getResponse());
this.exchange = exchange;
this.ruleHandle = ruleHandle;
@@ -58,29 +59,29 @@ public class ResponseDecorator extends
ServerHttpResponseDecorator {
@NonNull
@SuppressWarnings("unchecked")
public Mono<Void> writeWith(@NonNull final Publisher<? extends DataBuffer>
body) {
- ClientResponse clientResponse =
ClientResponseUtils.buildClientResponse(this.getDelegate(), body);
+ ClientResponse clientResponse =
ResponseUtils.buildClientResponse(this.getDelegate(), body);
Mono<String> mono =
clientResponse.bodyToMono(String.class).flatMap(originalBody ->
strategyMatch(originalBody, this.ruleHandle,
this.exchange));
BodyInserter<Mono<String>, ReactiveHttpOutputMessage> bodyInserter =
BodyInserters.fromPublisher(mono, String.class);
- CachedBodyOutputMessage outputMessage =
HttpUtil.newCachedBodyOutputMessage(exchange);
+ CachedBodyOutputMessage outputMessage =
ResponseUtils.newCachedBodyOutputMessage(exchange);
return bodyInserter.insert(outputMessage, new BodyInserterContext())
.then(Mono.defer(() -> {
- Mono<DataBuffer> messageBody =
ClientResponseUtils.fixBodyMessage(this.getDelegate(), outputMessage);
+ Mono<DataBuffer> messageBody =
ResponseUtils.fixBodyMessage(this.getDelegate(), outputMessage);
exchange.getAttributes().put(Constants.CLIENT_RESPONSE_ATTR, clientResponse);
return getDelegate().writeWith(messageBody);
- })).onErrorResume((Function<Throwable, Mono<Void>>) throwable
-> HttpUtil.release(outputMessage, throwable));
+ })).onErrorResume((Function<Throwable, Mono<Void>>) throwable
-> ResponseUtils.release(outputMessage, throwable));
}
@SuppressWarnings("rawtypes")
private Mono strategyMatch(final String originalBody, final
CryptorRuleHandle ruleHandle, final ServerWebExchange exchange) {
String parseBody = JsonUtil.parser(originalBody,
ruleHandle.getFieldNames());
- if (parseBody == null) {
+ if (Objects.isNull(parseBody)) {
return Mono.just(originalBody);
}
String modifiedBody = CryptorStrategyFactory.match(ruleHandle,
parseBody);
- if (modifiedBody == null) {
- return HttpUtil.fail(ruleHandle.getWay(), exchange);
+ if (Objects.isNull(modifiedBody)) {
+ return CryptorUtil.fail(ruleHandle.getWay(), exchange);
}
- return HttpUtil.success(originalBody, modifiedBody,
ruleHandle.getWay(), ruleHandle.getFieldNames());
+ return CryptorUtil.success(originalBody, modifiedBody,
ruleHandle.getWay(), ruleHandle.getFieldNames());
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/request/CryptorRequestPlugin.java
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/request/CryptorRequestPlugin.java
index 6ea7ff0..cf82419 100644
---
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/request/CryptorRequestPlugin.java
+++
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/request/CryptorRequestPlugin.java
@@ -19,7 +19,6 @@ package org.apache.shenyu.plugin.cryptor.request;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
-import org.apache.shenyu.plugin.cryptor.dto.CryptorRuleHandle;
import org.apache.shenyu.common.enums.PluginEnum;
import org.apache.shenyu.plugin.api.ShenyuPluginChain;
import org.apache.shenyu.plugin.api.result.ShenyuResultEnum;
@@ -29,10 +28,12 @@ import org.apache.shenyu.plugin.base.AbstractShenyuPlugin;
import org.apache.shenyu.plugin.base.support.BodyInserterContext;
import org.apache.shenyu.plugin.base.support.CachedBodyOutputMessage;
import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
-import org.apache.shenyu.plugin.cryptor.decorator.RequestDecorator;
+import org.apache.shenyu.plugin.base.utils.ResponseUtils;
+import org.apache.shenyu.plugin.cryptor.decorator.CryptorRequestDecorator;
+import org.apache.shenyu.plugin.cryptor.dto.CryptorRuleHandle;
import
org.apache.shenyu.plugin.cryptor.handler.CryptorRequestPluginDataHandler;
import org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategyFactory;
-import org.apache.shenyu.plugin.cryptor.utils.HttpUtil;
+import org.apache.shenyu.plugin.cryptor.utils.CryptorUtil;
import org.apache.shenyu.plugin.cryptor.utils.JsonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,7 +68,6 @@ public class CryptorRequestPlugin extends
AbstractShenyuPlugin {
LOG.error("Cryptor request rule configuration is null :{}",
rule.getId());
return chain.execute(exchange);
}
- CachedBodyOutputMessage outputMessage =
HttpUtil.newCachedBodyOutputMessage(exchange);
if (JsonUtil.checkParam(ruleHandle)) {
Object error =
ShenyuResultWrap.error(ShenyuResultEnum.CRYPTOR_REQUEST_ERROR_CONFIGURATION.getCode(),
ShenyuResultEnum.CRYPTOR_REQUEST_ERROR_CONFIGURATION.getMsg()
@@ -81,12 +81,12 @@ public class CryptorRequestPlugin extends
AbstractShenyuPlugin {
.flatMap(originalBody -> strategyMatch(ruleHandle,
originalBody, exchange));
BodyInserter<Mono<String>, ReactiveHttpOutputMessage> bodyInserter =
BodyInserters.fromPublisher(mono, String.class);
+ CachedBodyOutputMessage outputMessage =
ResponseUtils.newCachedBodyOutputMessage(exchange);
return bodyInserter.insert(outputMessage, new BodyInserterContext())
.then(Mono.defer(() -> {
- ServerHttpRequestDecorator decorator = new
RequestDecorator(exchange, outputMessage);
+ ServerHttpRequestDecorator decorator = new
CryptorRequestDecorator(exchange, outputMessage);
return
chain.execute(exchange.mutate().request(decorator).build());
- })).onErrorResume((Function<Throwable, Mono<Void>>) throwable
-> HttpUtil.release(outputMessage, throwable));
-
+ })).onErrorResume((Function<Throwable, Mono<Void>>) throwable
-> ResponseUtils.release(outputMessage, throwable));
}
@Override
@@ -102,15 +102,15 @@ public class CryptorRequestPlugin extends
AbstractShenyuPlugin {
@SuppressWarnings("rawtypes")
private Mono strategyMatch(final CryptorRuleHandle ruleHandle, final
String originalBody, final ServerWebExchange exchange) {
String parseBody = JsonUtil.parser(originalBody,
ruleHandle.getFieldNames());
- if (null == parseBody) {
+ if (Objects.isNull(parseBody)) {
Object error =
ShenyuResultWrap.error(ShenyuResultEnum.CRYPTOR_REQUEST_ERROR_CONFIGURATION.getCode(),
ShenyuResultEnum.CRYPTOR_REQUEST_ERROR_CONFIGURATION.getMsg() + "[fieldNames]",
null);
return WebFluxResultUtils.result(exchange, error);
}
String modifiedBody = CryptorStrategyFactory.match(ruleHandle,
parseBody);
- if (modifiedBody == null) {
- return HttpUtil.fail(ruleHandle.getWay(), exchange);
+ if (Objects.isNull(modifiedBody)) {
+ return CryptorUtil.fail(ruleHandle.getWay(), exchange);
}
- return HttpUtil.success(originalBody, modifiedBody,
ruleHandle.getWay(), ruleHandle.getFieldNames());
+ return CryptorUtil.success(originalBody, modifiedBody,
ruleHandle.getWay(), ruleHandle.getFieldNames());
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePlugin.java
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePlugin.java
index 88ce0e4..9c3e515 100644
---
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePlugin.java
+++
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePlugin.java
@@ -26,7 +26,7 @@ import org.apache.shenyu.plugin.api.result.ShenyuResultWrap;
import org.apache.shenyu.plugin.api.utils.WebFluxResultUtils;
import org.apache.shenyu.plugin.base.AbstractShenyuPlugin;
import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
-import org.apache.shenyu.plugin.cryptor.decorator.ResponseDecorator;
+import org.apache.shenyu.plugin.cryptor.decorator.CryptorResponseDecorator;
import org.apache.shenyu.plugin.cryptor.dto.CryptorRuleHandle;
import
org.apache.shenyu.plugin.cryptor.handler.CryptorResponsePluginDataHandler;
import org.apache.shenyu.plugin.cryptor.utils.JsonUtil;
@@ -57,7 +57,7 @@ public class CryptorResponsePlugin extends
AbstractShenyuPlugin {
return WebFluxResultUtils.result(exchange, error);
}
return chain.execute(exchange.mutate()
- .response(new ResponseDecorator(exchange,
ruleHandle)).build());
+ .response(new CryptorResponseDecorator(exchange,
ruleHandle)).build());
}
@Override
diff --git
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/utils/HttpUtil.java
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/utils/CryptorUtil.java
similarity index 63%
rename from
shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/utils/HttpUtil.java
rename to
shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/utils/CryptorUtil.java
index cbaa773..838274e 100644
---
a/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/utils/HttpUtil.java
+++
b/shenyu-plugin/shenyu-plugin-cryptor/src/main/java/org/apache/shenyu/plugin/cryptor/utils/CryptorUtil.java
@@ -22,10 +22,7 @@ import com.google.gson.JsonParser;
import org.apache.shenyu.plugin.api.result.ShenyuResultEnum;
import org.apache.shenyu.plugin.api.result.ShenyuResultWrap;
import org.apache.shenyu.plugin.api.utils.WebFluxResultUtils;
-import org.apache.shenyu.plugin.base.support.CachedBodyOutputMessage;
import org.apache.shenyu.plugin.cryptor.strategy.CryptorStrategyFactory;
-import org.springframework.core.io.buffer.DataBufferUtils;
-import org.springframework.http.HttpHeaders;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@@ -33,53 +30,9 @@ import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
/**
- * http util.
+ * cryptor util.
*/
-public class HttpUtil {
-
- private static final String CHUNKED = "chunked";
-
- /**
- * change header.
- * @param headers headers
- * @return HttpHeaders.
- */
- public static HttpHeaders modifiedContentLength(final HttpHeaders headers)
{
- long contentLength = headers.getContentLength();
- HttpHeaders httpHeaders = new HttpHeaders();
- httpHeaders.putAll(headers);
- if (contentLength > 0) {
- httpHeaders.setContentLength(contentLength);
- } else {
- httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, CHUNKED);
- }
- return httpHeaders;
- }
-
- /**
- * create CachedBodyOutputMessage.
- * @param exchange ServerWebExchange
- * @return CachedBodyOutputMessage.
- */
- public static CachedBodyOutputMessage newCachedBodyOutputMessage(final
ServerWebExchange exchange) {
- HttpHeaders headers = new HttpHeaders();
- headers.putAll(exchange.getRequest().getHeaders());
- headers.remove(HttpHeaders.CONTENT_LENGTH);
- return new CachedBodyOutputMessage(exchange, headers);
- }
-
- /**
- * release source.
- * @param outputMessage CachedBodyOutputMessage
- * @param throwable Throwable
- * @return Mono.
- */
- public static Mono<Void> release(final CachedBodyOutputMessage
outputMessage, final Throwable throwable) {
- if (outputMessage.getCache()) {
- return
outputMessage.getBody().map(DataBufferUtils::release).then(Mono.error(throwable));
- }
- return Mono.error(throwable);
- }
+public class CryptorUtil {
/**
* error handling.
@@ -120,5 +73,4 @@ public class HttpUtil {
Arrays.asList(fieldNames.split("\\.")));
return Mono.just(resultJe.toString());
}
-
}
diff --git
a/shenyu-plugin/shenyu-plugin-cryptor/src/test/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePluginTest.java
b/shenyu-plugin/shenyu-plugin-cryptor/src/test/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePluginTest.java
index 9447d1a..80cd62f 100644
---
a/shenyu-plugin/shenyu-plugin-cryptor/src/test/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePluginTest.java
+++
b/shenyu-plugin/shenyu-plugin-cryptor/src/test/java/org/apache/shenyu/plugin/cryptor/response/CryptorResponsePluginTest.java
@@ -22,7 +22,7 @@ import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.common.enums.PluginEnum;
import org.apache.shenyu.plugin.api.ShenyuPluginChain;
-import org.apache.shenyu.plugin.cryptor.decorator.ResponseDecorator;
+import org.apache.shenyu.plugin.cryptor.decorator.CryptorResponseDecorator;
import
org.apache.shenyu.plugin.cryptor.handler.CryptorResponsePluginDataHandler;
import org.junit.Before;
import org.junit.Test;
@@ -98,7 +98,7 @@ public class CryptorResponsePluginTest {
+ "}\n");
ServerWebExchange.Builder builder =
mock(ServerWebExchange.Builder.class);
when(exchange.mutate()).thenReturn(builder);
-
when(builder.response(any(ResponseDecorator.class))).thenReturn(builder);
+
when(builder.response(any(CryptorResponseDecorator.class))).thenReturn(builder);
when(builder.build()).thenReturn(exchange);
when(chain.execute(any())).thenReturn(Mono.empty());
cryptorResponsePluginDataHandler.handlerRule(ruleData);
@@ -129,7 +129,7 @@ public class CryptorResponsePluginTest {
+ "}\n");
ServerWebExchange.Builder builder =
mock(ServerWebExchange.Builder.class);
when(exchange.mutate()).thenReturn(builder);
-
when(builder.response(any(ResponseDecorator.class))).thenReturn(builder);
+
when(builder.response(any(CryptorResponseDecorator.class))).thenReturn(builder);
when(builder.build()).thenReturn(exchange);
when(chain.execute(any())).thenReturn(Mono.empty());
cryptorResponsePluginDataHandler.handlerRule(ruleData);
@@ -159,7 +159,7 @@ public class CryptorResponsePluginTest {
+ "}\n");
ServerWebExchange.Builder builder =
mock(ServerWebExchange.Builder.class);
when(exchange.mutate()).thenReturn(builder);
-
when(builder.response(any(ResponseDecorator.class))).thenReturn(builder);
+
when(builder.response(any(CryptorResponseDecorator.class))).thenReturn(builder);
when(builder.build()).thenReturn(exchange);
when(chain.execute(any())).thenReturn(Mono.empty());
cryptorResponsePluginDataHandler.handlerRule(ruleData);
@@ -190,7 +190,7 @@ public class CryptorResponsePluginTest {
+ "}\n");
ServerWebExchange.Builder builder =
mock(ServerWebExchange.Builder.class);
when(exchange.mutate()).thenReturn(builder);
-
when(builder.response(any(ResponseDecorator.class))).thenReturn(builder);
+
when(builder.response(any(CryptorResponseDecorator.class))).thenReturn(builder);
when(builder.build()).thenReturn(exchange);
when(chain.execute(any())).thenReturn(Mono.empty());
cryptorResponsePluginDataHandler.handlerRule(ruleData);
diff --git
a/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/ModifyResponsePlugin.java
b/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/ModifyResponsePlugin.java
index 78ae208..0ef59c3 100644
---
a/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/ModifyResponsePlugin.java
+++
b/shenyu-plugin/shenyu-plugin-modify-response/src/main/java/org/apache/shenyu/plugin/modify/response/ModifyResponsePlugin.java
@@ -32,7 +32,7 @@ import org.apache.shenyu.plugin.base.AbstractShenyuPlugin;
import org.apache.shenyu.plugin.base.support.BodyInserterContext;
import org.apache.shenyu.plugin.base.support.CachedBodyOutputMessage;
import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
-import org.apache.shenyu.plugin.base.utils.ClientResponseUtils;
+import org.apache.shenyu.plugin.base.utils.ResponseUtils;
import
org.apache.shenyu.plugin.modify.response.handler.ModifyResponsePluginDataHandler;
import org.reactivestreams.Publisher;
import org.springframework.core.io.buffer.DataBuffer;
@@ -55,6 +55,7 @@ import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Function;
/**
* ModifyResponse plugin.
@@ -133,20 +134,18 @@ public class ModifyResponsePlugin extends
AbstractShenyuPlugin {
@Override
@NonNull
public Mono<Void> writeWith(@NonNull final Publisher<? extends
DataBuffer> body) {
- ClientResponse clientResponse =
ClientResponseUtils.buildClientResponse(this.getDelegate(), body);
+ ClientResponse clientResponse =
ResponseUtils.buildClientResponse(this.getDelegate(), body);
Mono<byte[]> modifiedBody = clientResponse.bodyToMono(byte[].class)
.flatMap(originalBody ->
Mono.just(updateResponse(originalBody)));
BodyInserter<Mono<byte[]>, ReactiveHttpOutputMessage> bodyInserter
=
BodyInserters.fromPublisher(modifiedBody, byte[].class);
- CachedBodyOutputMessage outputMessage = new
CachedBodyOutputMessage(exchange,
- exchange.getResponse().getHeaders());
+ CachedBodyOutputMessage outputMessage =
ResponseUtils.newCachedBodyOutputMessage(this.exchange);
return bodyInserter.insert(outputMessage, new
BodyInserterContext()).then(Mono.defer(() -> {
- Mono<DataBuffer> messageBody =
ClientResponseUtils.fixBodyMessage(this.getDelegate(), outputMessage);
+ Mono<DataBuffer> messageBody =
ResponseUtils.fixBodyMessage(this.getDelegate(), outputMessage);
exchange.getAttributes().put(Constants.CLIENT_RESPONSE_ATTR,
clientResponse);
return getDelegate().writeWith(messageBody);
- }));
-
+ })).onErrorResume((Function<Throwable, Mono<Void>>) throwable ->
ResponseUtils.release(outputMessage, throwable));
}
private byte[] updateResponse(final byte[] responseBody) {