From b6e24db68cc0e61f11c0189328ce932a3ca41dfa Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:12:21 -0600 Subject: [PATCH] Return Mono.empty on Empty POST Closes gh-18973 Signed-off-by: Josh Cummings <3627351+jzheaux@users.noreply.github.com> --- .../ServerOneTimeTokenAuthenticationConverter.java | 3 ++- ...rverOneTimeTokenAuthenticationConverterTests.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverter.java b/web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverter.java index d5e2da6afc..b2281f0e6a 100644 --- a/web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverter.java +++ b/web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverter.java @@ -49,7 +49,8 @@ public final class ServerOneTimeTokenAuthenticationConverter implements ServerAu Assert.notNull(exchange, "exchange cannot be null"); if (isFormEncodedRequest(exchange.getRequest())) { return exchange.getFormData() - .map((data) -> OneTimeTokenAuthenticationToken.unauthenticated(data.getFirst(TOKEN))); + .mapNotNull((data) -> data.getFirst(TOKEN)) + .map((data) -> OneTimeTokenAuthenticationToken.unauthenticated(data)); } String token = resolveTokenFromRequest(exchange.getRequest()); if (!StringUtils.hasText(token)) { diff --git a/web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverterTests.java b/web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverterTests.java index 63f8d70ee8..63a729ac5e 100644 --- a/web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverterTests.java +++ b/web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenAuthenticationConverterTests.java @@ -72,6 +72,18 @@ public class ServerOneTimeTokenAuthenticationConverterTests { assertThat(authentication).isNull(); } + // gh-18973 + @Test + void convertWhenNoTokenFormParameterThenNull() { + MockServerHttpRequest request = MockServerHttpRequest.post("/") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .body("username=Max"); + + Authentication authentication = this.converter.convert(MockServerWebExchange.from(request)).block(); + + assertThat(authentication).isNull(); + } + @Test void convertWhenTokenEncodedFormParameterThenReturnOneTimeTokenAuthenticationToken() { // @formatter:off