From 050dc5d1ed73d233d6b9869b5c5a1336429ecd52 Mon Sep 17 00:00:00 2001 From: Patrick Boos Date: Thu, 1 Jun 2023 14:56:47 +0200 Subject: [PATCH 1/2] Fix problem with validating partial bodies instead of whole body --- .../core/ValidationReportHandler.java | 2 -- ...BodyCachingServerHttpRequestDecorator.java | 21 +++++++++++++------ ...BodyCachingServerHttpRequestDecorator.java | 21 +++++++++++++------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java b/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java index 51f6d181..f6344bd3 100644 --- a/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java +++ b/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/ValidationReportHandler.java @@ -83,8 +83,6 @@ private OpenApiViolation buildOpenApiViolation( private boolean isViolationExcluded(OpenApiViolation openApiViolation) { return violationExclusions.isExcluded(openApiViolation) - // JSON parse errors should be ignored as it can't be compared to the schema then (this also prevents logging personal data!) - || openApiViolation.getMessage().startsWith("Unable to parse JSON") // If it matches more than 1, then we don't want to log a validation error || openApiViolation.getMessage().matches( ".*\\[Path '[^']+'] Instance failed to match exactly one schema \\(matched [1-9][0-9]* out of \\d\\).*"); diff --git a/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java b/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java index 3b25ea01..637836e6 100644 --- a/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java +++ b/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java @@ -10,6 +10,7 @@ import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.lang.NonNull; import reactor.core.publisher.Flux; +import reactor.core.publisher.SignalType; public class BodyCachingServerHttpRequestDecorator extends ServerHttpRequestDecorator { private final TrafficSelector trafficSelector; @@ -38,11 +39,19 @@ public Flux getBody() { return super.getBody(); } - return super.getBody().doOnNext(dataBuffer -> { - cachedBody = dataBuffer.toString(StandardCharsets.UTF_8); - if (onBodyCachedListener != null) { - onBodyCachedListener.run(); - } - }); + return super.getBody() + .doOnNext(dataBuffer -> { + if (cachedBody == null) { + cachedBody = ""; + } + cachedBody += dataBuffer.toString(StandardCharsets.UTF_8); + }) + .doFinally(signalType -> { + if (signalType == SignalType.ON_COMPLETE) { + if (onBodyCachedListener != null) { + onBodyCachedListener.run(); + } + } + }); } } diff --git a/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java b/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java index 3b25ea01..637836e6 100644 --- a/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java +++ b/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java @@ -10,6 +10,7 @@ import org.springframework.http.server.reactive.ServerHttpRequestDecorator; import org.springframework.lang.NonNull; import reactor.core.publisher.Flux; +import reactor.core.publisher.SignalType; public class BodyCachingServerHttpRequestDecorator extends ServerHttpRequestDecorator { private final TrafficSelector trafficSelector; @@ -38,11 +39,19 @@ public Flux getBody() { return super.getBody(); } - return super.getBody().doOnNext(dataBuffer -> { - cachedBody = dataBuffer.toString(StandardCharsets.UTF_8); - if (onBodyCachedListener != null) { - onBodyCachedListener.run(); - } - }); + return super.getBody() + .doOnNext(dataBuffer -> { + if (cachedBody == null) { + cachedBody = ""; + } + cachedBody += dataBuffer.toString(StandardCharsets.UTF_8); + }) + .doFinally(signalType -> { + if (signalType == SignalType.ON_COMPLETE) { + if (onBodyCachedListener != null) { + onBodyCachedListener.run(); + } + } + }); } } From b6f5c331dcf724fdd378b27d2228c55aec1e413e Mon Sep 17 00:00:00 2001 From: Patrick Boos Date: Thu, 1 Jun 2023 15:05:56 +0200 Subject: [PATCH 2/2] Collapse if statement --- .../decorator/BodyCachingServerHttpRequestDecorator.java | 6 ++---- .../decorator/BodyCachingServerHttpRequestDecorator.java | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java b/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java index 637836e6..c883a4f7 100644 --- a/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java +++ b/spring-boot-starter/spring-boot-starter-webflux-spring2.7/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java @@ -47,10 +47,8 @@ public Flux getBody() { cachedBody += dataBuffer.toString(StandardCharsets.UTF_8); }) .doFinally(signalType -> { - if (signalType == SignalType.ON_COMPLETE) { - if (onBodyCachedListener != null) { - onBodyCachedListener.run(); - } + if (signalType == SignalType.ON_COMPLETE && onBodyCachedListener != null) { + onBodyCachedListener.run(); } }); } diff --git a/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java b/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java index 637836e6..c883a4f7 100644 --- a/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java +++ b/spring-boot-starter/spring-boot-starter-webflux/src/main/java/com/getyourguide/openapi/validation/filter/decorator/BodyCachingServerHttpRequestDecorator.java @@ -47,10 +47,8 @@ public Flux getBody() { cachedBody += dataBuffer.toString(StandardCharsets.UTF_8); }) .doFinally(signalType -> { - if (signalType == SignalType.ON_COMPLETE) { - if (onBodyCachedListener != null) { - onBodyCachedListener.run(); - } + if (signalType == SignalType.ON_COMPLETE && onBodyCachedListener != null) { + onBodyCachedListener.run(); } }); }