From 7705613b4a8bbe283aaac8888138677edf4f2e21 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Tue, 28 Jul 2020 14:14:23 -0400 Subject: [PATCH] Instanceof check to avoid class cast exception See gh-1873 --- .../gateway/filter/RemoveCachedBodyFilter.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RemoveCachedBodyFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RemoveCachedBodyFilter.java index 25a390c2..42bc0b57 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RemoveCachedBodyFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/RemoveCachedBodyFilter.java @@ -33,13 +33,15 @@ public class RemoveCachedBodyFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter(exchange).doFinally(s -> { - PooledDataBuffer dataBuffer = (PooledDataBuffer) exchange.getAttributes() - .remove(CACHED_REQUEST_BODY_ATTR); - if (dataBuffer != null && dataBuffer.isAllocated()) { - if (log.isTraceEnabled()) { - log.trace("releasing cached body in exchange attribute"); + Object attribute = exchange.getAttributes().remove(CACHED_REQUEST_BODY_ATTR); + if (attribute != null && attribute instanceof PooledDataBuffer) { + PooledDataBuffer dataBuffer = (PooledDataBuffer) attribute; + if (dataBuffer.isAllocated()) { + if (log.isTraceEnabled()) { + log.trace("releasing cached body in exchange attribute"); + } + dataBuffer.release(); } - dataBuffer.release(); } }); }