@@ -125,9 +125,10 @@ public void filterWhenPostAndEstablishedCsrfTokenAndRequestParamValidTokenThenCo
125
125
this .csrfFilter .setCsrfTokenRepository (this .repository );
126
126
given (this .repository .loadToken (any ())).willReturn (Mono .just (this .token ));
127
127
given (this .repository .generateToken (any ())).willReturn (Mono .just (this .token ));
128
+ CsrfToken csrfToken = createXorCsrfToken ();
128
129
this .post = MockServerWebExchange
129
130
.from (MockServerHttpRequest .post ("/" ).contentType (MediaType .APPLICATION_FORM_URLENCODED )
130
- .body (this . token . getParameterName () + "=" + this . token .getToken ()));
131
+ .body (csrfToken . getParameterName () + "=" + csrfToken .getToken ()));
131
132
Mono <Void > result = this .csrfFilter .filter (this .post , this .chain );
132
133
StepVerifier .create (result ).verifyComplete ();
133
134
chainResult .assertWasSubscribed ();
@@ -151,8 +152,9 @@ public void filterWhenPostAndEstablishedCsrfTokenAndHeaderValidTokenThenContinue
151
152
this .csrfFilter .setCsrfTokenRepository (this .repository );
152
153
given (this .repository .loadToken (any ())).willReturn (Mono .just (this .token ));
153
154
given (this .repository .generateToken (any ())).willReturn (Mono .just (this .token ));
155
+ CsrfToken csrfToken = createXorCsrfToken ();
154
156
this .post = MockServerWebExchange
155
- .from (MockServerHttpRequest .post ("/" ).header (this . token . getHeaderName (), this . token .getToken ()));
157
+ .from (MockServerHttpRequest .post ("/" ).header (csrfToken . getHeaderName (), csrfToken .getToken ()));
156
158
Mono <Void > result = this .csrfFilter .filter (this .post , this .chain );
157
159
StepVerifier .create (result ).verifyComplete ();
158
160
chainResult .assertWasSubscribed ();
@@ -181,30 +183,22 @@ public void filterWhenRequestHandlerSetThenUsed() {
181
183
}
182
184
183
185
@ Test
184
- public void filterWhenXorServerCsrfTokenRequestProcessorAndValidTokenThenSuccess () {
186
+ public void filterWhenXorServerCsrfTokenRequestAttributeHandlerAndValidTokenThenSuccess () {
185
187
PublisherProbe <Void > chainResult = PublisherProbe .empty ();
186
188
given (this .chain .filter (any ())).willReturn (chainResult .mono ());
187
189
this .csrfFilter .setCsrfTokenRepository (this .repository );
188
190
given (this .repository .generateToken (any ())).willReturn (Mono .just (this .token ));
189
191
given (this .repository .loadToken (any ())).willReturn (Mono .just (this .token ));
190
- XorServerCsrfTokenRequestAttributeHandler requestHandler = new XorServerCsrfTokenRequestAttributeHandler ();
191
- this .csrfFilter .setRequestHandler (requestHandler );
192
- StepVerifier .create (this .csrfFilter .filter (this .get , this .chain )).verifyComplete ();
193
- chainResult .assertWasSubscribed ();
194
-
195
- Mono <CsrfToken > csrfTokenAttribute = this .get .getAttribute (CsrfToken .class .getName ());
196
- assertThat (csrfTokenAttribute ).isNotNull ();
197
- StepVerifier .create (csrfTokenAttribute )
198
- .consumeNextWith ((csrfToken ) -> this .post = MockServerWebExchange
199
- .from (MockServerHttpRequest .post ("/" ).header (csrfToken .getHeaderName (), csrfToken .getToken ())))
200
- .verifyComplete ();
201
192
193
+ CsrfToken csrfToken = createXorCsrfToken ();
194
+ this .post = MockServerWebExchange
195
+ .from (MockServerHttpRequest .post ("/" ).header (csrfToken .getHeaderName (), csrfToken .getToken ()));
202
196
StepVerifier .create (this .csrfFilter .filter (this .post , this .chain )).verifyComplete ();
203
197
chainResult .assertWasSubscribed ();
204
198
}
205
199
206
200
@ Test
207
- public void filterWhenXorServerCsrfTokenRequestProcessorAndRawTokenThenAccessDeniedException () {
201
+ public void filterWhenXorServerCsrfTokenRequestAttributeHandlerAndRawTokenThenAccessDeniedException () {
208
202
PublisherProbe <Void > chainResult = PublisherProbe .empty ();
209
203
this .csrfFilter .setCsrfTokenRepository (this .repository );
210
204
given (this .repository .loadToken (any ())).willReturn (Mono .just (this .token ));
@@ -305,6 +299,7 @@ public void filterWhenMultipartMixedAndEnabledThenNotRead() {
305
299
}
306
300
307
301
// gh-9561
302
+
308
303
@ Test
309
304
public void doFilterWhenTokenIsNullThenNoNullPointer () {
310
305
this .csrfFilter .setCsrfTokenRepository (this .repository );
@@ -318,8 +313,8 @@ public void doFilterWhenTokenIsNullThenNoNullPointer() {
318
313
.bodyValue (this .token .getParameterName () + "=" + this .token .getToken ()).exchange ().expectStatus ()
319
314
.isForbidden ();
320
315
}
321
-
322
316
// gh-9113
317
+
323
318
@ Test
324
319
public void filterWhenSubscribingCsrfTokenMultipleTimesThenGenerateOnlyOnce () {
325
320
PublisherProbe <CsrfToken > chainResult = PublisherProbe .empty ();
@@ -334,6 +329,14 @@ public void filterWhenSubscribingCsrfTokenMultipleTimesThenGenerateOnlyOnce() {
334
329
assertThat (chainResult .subscribeCount ()).isEqualTo (1 );
335
330
}
336
331
332
+ private CsrfToken createXorCsrfToken () {
333
+ ServerCsrfTokenRequestHandler handler = new XorServerCsrfTokenRequestAttributeHandler ();
334
+ MockServerWebExchange exchange = MockServerWebExchange .from (MockServerHttpRequest .get ("/" ));
335
+ handler .handle (exchange , Mono .just (this .token ));
336
+ Mono <CsrfToken > csrfToken = exchange .getAttribute (CsrfToken .class .getName ());
337
+ return csrfToken .block ();
338
+ }
339
+
337
340
@ RestController
338
341
static class OkController {
339
342
0 commit comments