Skip to content

Commit 6ccac4c

Browse files
committed
Add reactive handle method to ServerCsrfTokenRequestHandler
Adds a default reactive handle method returning Mono<Void> and deprecates the legacy void handle method in preparation for Spring Security 8. Signed-off-by: Andrey Litvitski <[email protected]>
1 parent 42e1e9f commit 6ccac4c

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

web/src/main/java/org/springframework/security/web/server/csrf/CsrfWebFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
* @author Rob Winch
6161
* @author Parikshit Dutta
6262
* @author Steve Riesenberg
63+
* @author Andrey Litvitski
6364
* @since 5.0
6465
*/
6566
public class CsrfWebFilter implements WebFilter {
@@ -147,8 +148,7 @@ private Mono<Boolean> containsValidCsrfToken(ServerWebExchange exchange, CsrfTok
147148
private Mono<Void> continueFilterChain(ServerWebExchange exchange, WebFilterChain chain) {
148149
return Mono.defer(() -> {
149150
Mono<CsrfToken> csrfToken = csrfToken(exchange);
150-
this.requestHandler.handle(exchange, csrfToken);
151-
return chain.filter(exchange);
151+
return this.requestHandler.handleAsync(exchange, csrfToken).then(chain.filter(exchange));
152152
});
153153
}
154154

web/src/main/java/org/springframework/security/web/server/csrf/ServerCsrfTokenRequestHandler.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
* made available to the application through exchange attributes.
3030
*
3131
* @author Steve Riesenberg
32+
* @author Andrey Litvitski
3233
* @since 5.8
3334
* @see ServerCsrfTokenRequestAttributeHandler
3435
*/
@@ -40,9 +41,23 @@ public interface ServerCsrfTokenRequestHandler extends ServerCsrfTokenRequestRes
4041
* @param exchange the {@code ServerWebExchange} with the request being handled
4142
* @param csrfToken the {@code Mono<CsrfToken>} created by the
4243
* {@link ServerCsrfTokenRepository}
44+
* @deprecated since 7.0 in favor of {@link #handleAsync(ServerWebExchange, Mono)}
4345
*/
46+
@Deprecated(since = "7.0", forRemoval = true)
4447
void handle(ServerWebExchange exchange, Mono<CsrfToken> csrfToken);
4548

49+
/**
50+
* Handles a request using a {@link CsrfToken}.
51+
* @param exchange the {@code ServerWebExchange} with the request being handled
52+
* @param csrfToken the {@code Mono<CsrfToken>} created by the
53+
* {@link ServerCsrfTokenRepository}
54+
* @return a {@code Mono} that completes when handling is finished
55+
*/
56+
default Mono<Void> handleAsync(ServerWebExchange exchange, Mono<CsrfToken> csrfToken) {
57+
handle(exchange, csrfToken);
58+
return Mono.empty();
59+
}
60+
4661
@Override
4762
default Mono<String> resolveCsrfTokenValue(ServerWebExchange exchange, CsrfToken csrfToken) {
4863
Assert.notNull(exchange, "exchange cannot be null");

web/src/test/java/org/springframework/security/web/server/csrf/CsrfWebFilterTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ public void filterWhenPostAndEstablishedCsrfTokenAndHeaderValidTokenThenContinue
164164
@Test
165165
public void filterWhenRequestHandlerSetThenUsed() {
166166
ServerCsrfTokenRequestHandler requestHandler = mock(ServerCsrfTokenRequestHandler.class);
167+
given(requestHandler.handleAsync(any(ServerWebExchange.class), any())).willReturn(Mono.empty());
167168
given(requestHandler.resolveCsrfTokenValue(any(ServerWebExchange.class), any(CsrfToken.class)))
168169
.willReturn(Mono.just(this.token.getToken()));
169170
this.csrfFilter.setRequestHandler(requestHandler);
@@ -179,7 +180,7 @@ public void filterWhenRequestHandlerSetThenUsed() {
179180
StepVerifier.create(result).verifyComplete();
180181
chainResult.assertWasSubscribed();
181182

182-
verify(requestHandler).handle(eq(this.post), any());
183+
verify(requestHandler).handleAsync(eq(this.post), any());
183184
verify(requestHandler).resolveCsrfTokenValue(this.post, this.token);
184185
}
185186

0 commit comments

Comments
 (0)