From ab7f79bd085e27c62e3f31d60f13e4366b605724 Mon Sep 17 00:00:00 2001 From: Marta Medio Date: Fri, 18 Nov 2022 14:20:02 +0100 Subject: [PATCH] Avoid ClassCastException when using ServerHttpResponseDecorator --- .../filter/headers/GRPCResponseHeadersFilter.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/GRPCResponseHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/GRPCResponseHeadersFilter.java index f8373677..5a5a8104 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/GRPCResponseHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/GRPCResponseHeadersFilter.java @@ -22,6 +22,7 @@ import org.springframework.core.Ordered; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.AbstractServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.http.server.reactive.ServerHttpResponseDecorator; import org.springframework.util.StringUtils; import org.springframework.web.server.ServerWebExchange; @@ -41,8 +42,15 @@ public class GRPCResponseHeadersFilter implements HttpHeadersFilter, Ordered { trailerHeaderValue += "," + originalTrailerHeaderValue; } responseHeaders.set(HttpHeaders.TRAILER, trailerHeaderValue); - ((HttpServerResponse) ((AbstractServerHttpResponse) response).getNativeResponse()) - .trailerHeaders(h -> h.set("grpc-status", "0")); + + while (response instanceof ServerHttpResponseDecorator) { + response = ((ServerHttpResponseDecorator) response).getDelegate(); + } + if (response instanceof AbstractServerHttpResponse) { + ((HttpServerResponse) ((AbstractServerHttpResponse) response).getNativeResponse()) + .trailerHeaders(h -> h.set("grpc-status", "0")); + } + } return headers; }