diff --git a/spring-graphql/src/main/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicates.java b/spring-graphql/src/main/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicates.java index 2fa5fd5ae..dd29d051f 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicates.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicates.java @@ -97,10 +97,10 @@ private static class GraphQlHttpRequestPredicate implements RequestPredicate { @Override public boolean test(ServerRequest request) { - return httpMethodMatch(request, HttpMethod.POST) + return pathMatch(request, this.pattern) + && httpMethodMatch(request, HttpMethod.POST) && contentTypeMatch(request, this.contentTypes) - && acceptMatch(request, this.acceptedMediaTypes) - && pathMatch(request, this.pattern); + && acceptMatch(request, this.acceptedMediaTypes); } private static boolean httpMethodMatch(ServerRequest request, HttpMethod expected) { diff --git a/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicates.java b/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicates.java index 9b7ad5349..0addd7d73 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicates.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicates.java @@ -97,10 +97,10 @@ private static class GraphQlHttpRequestPredicate implements RequestPredicate { @Override public boolean test(ServerRequest request) { - return httpMethodMatch(request, HttpMethod.POST) + return pathMatch(request, this.pattern) + && httpMethodMatch(request, HttpMethod.POST) && contentTypeMatch(request, this.contentTypes) - && acceptMatch(request, this.acceptedMediaTypes) - && pathMatch(request, this.pattern); + && acceptMatch(request, this.acceptedMediaTypes); } private static boolean httpMethodMatch(ServerRequest request, HttpMethod expected) { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicatesTests.java b/spring-graphql/src/test/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicatesTests.java index 0dd70a28d..fb7368a76 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicatesTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/server/webflux/GraphQlRequestPredicatesTests.java @@ -105,6 +105,16 @@ void shouldRejectRequestWithIncompatibleContentType() { assertThat(httpPredicate.test(serverRequest)).isFalse(); } + @Test // gh-1485 + void shouldNotRejectRequestWithInvalidContentTypeOnDifferentPath() { + MockServerHttpRequest request = MockServerHttpRequest.post("/invalid") + .header(HttpHeaders.CONTENT_TYPE, "bogus") + .accept(MediaType.APPLICATION_JSON, MediaTypes.APPLICATION_GRAPHQL_RESPONSE) + .build(); + ServerRequest serverRequest = ServerRequest.create(MockServerWebExchange.from(request), Collections.emptyList()); + assertThat(httpPredicate.test(serverRequest)).isFalse(); + } + @Test void shouldRejectRequestWithInvalidContentType() { ServerWebExchange exchange = createMatchingHttpExchange() diff --git a/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicatesTests.java b/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicatesTests.java index c1316afb5..f313f182a 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicatesTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlRequestPredicatesTests.java @@ -104,6 +104,15 @@ void shouldRejectRequestWithInvalidContentType() { assertThatThrownBy(() -> httpPredicate.test(request)).isInstanceOf(UnsupportedMediaTypeStatusException.class); } + @Test // gh-1485 + void shouldNotRejectRequestWithInvalidContentTypeOnDifferentPath() { + MockHttpServletRequest servletRequest = createMatchingHttpRequest(); + servletRequest.setRequestURI("/invalid"); + servletRequest.setContentType("bogus"); + ServerRequest request = ServerRequest.create(servletRequest, List.of()); + assertThat(httpPredicate.test(request)).isFalse(); + } + @Test void shouldRejectRequestWithIncompatibleAccept() { MockHttpServletRequest request = createMatchingHttpRequest();