CORS support in HTTP header predicate
This commit introduces CORS support for the HeadersPredicate in WebMvc.fn and WebFlux.fn. Closes gh-24564
This commit is contained in:
@@ -550,7 +550,12 @@ public abstract class RequestPredicates {
|
||||
|
||||
@Override
|
||||
public boolean test(ServerRequest request) {
|
||||
return this.headersPredicate.test(request.headers());
|
||||
if (CorsUtils.isPreFlightRequest(request.exchange().getRequest())) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return this.headersPredicate.test(request.headers());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -198,6 +198,18 @@ public class RequestPredicatesTests {
|
||||
assertThat(predicate.test(request)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void headersCors() {
|
||||
RequestPredicate predicate = RequestPredicates.headers(headers -> false);
|
||||
MockServerHttpRequest mockRequest = MockServerHttpRequest.options("https://example.com")
|
||||
.header("Origin", "https://example.com")
|
||||
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "PUT")
|
||||
.build();
|
||||
ServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
|
||||
assertThat(predicate.test(request)).isTrue();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void contentType() {
|
||||
MediaType json = MediaType.APPLICATION_JSON;
|
||||
|
||||
@@ -543,7 +543,12 @@ public abstract class RequestPredicates {
|
||||
|
||||
@Override
|
||||
public boolean test(ServerRequest request) {
|
||||
return this.headersPredicate.test(request.headers());
|
||||
if (CorsUtils.isPreFlightRequest(request.servletRequest())) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return this.headersPredicate.test(request.headers());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -197,6 +197,16 @@ public class RequestPredicatesTests {
|
||||
assertThat(predicate.test(request)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void headersCors() {
|
||||
RequestPredicate predicate = RequestPredicates.headers(headers -> false);
|
||||
MockHttpServletRequest servletRequest = new MockHttpServletRequest("OPTIONS", "https://example.com");
|
||||
servletRequest.addHeader("Origin", "https://example.com");
|
||||
servletRequest.addHeader(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "PUT");
|
||||
ServerRequest request = new DefaultServerRequest(servletRequest, emptyList());
|
||||
assertThat(predicate.test(request)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void contentType() {
|
||||
MediaType json = MediaType.APPLICATION_JSON;
|
||||
|
||||
Reference in New Issue
Block a user