From a01fc5b7588947efe70e287222f3bf6a895f1504 Mon Sep 17 00:00:00 2001 From: Olivier Bourgain Date: Fri, 4 Aug 2017 21:40:10 +0200 Subject: [PATCH] Fix check then act issue (#2160) --- .../zuul/filters/pre/FormBodyWrapperFilter.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java index 175c5cfb..5f1fef74 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/FormBodyWrapperFilter.java @@ -140,7 +140,7 @@ public class FormBodyWrapperFilter extends ZuulFilter { private HttpServletRequest request; - private byte[] contentData; + private volatile byte[] contentData; private MediaType contentType; @@ -183,6 +183,9 @@ public class FormBodyWrapperFilter extends ZuulFilter { } private synchronized void buildContentData() { + if (this.contentData != null) { + return; + } try { MultiValueMap builder = RequestContentDataExtractor.extract(this.request); FormHttpOutputMessage data = new FormHttpOutputMessage(); @@ -192,8 +195,9 @@ public class FormBodyWrapperFilter extends ZuulFilter { FormBodyWrapperFilter.this.formHttpMessageConverter.write(builder, this.contentType, data); // copy new content type including multipart boundary this.contentType = data.getHeaders().getContentType(); - this.contentData = data.getInput(); - this.contentLength = this.contentData.length; + byte[] input = data.getInput(); + this.contentLength = input.length; + this.contentData = input; } catch (Exception e) { throw new IllegalStateException("Cannot convert form data", e);