2121import org .junit .jupiter .api .Test ;
2222
2323import org .springframework .http .HttpHeaders ;
24- import org .springframework .mock .web .MockCookie ;
2524import org .springframework .mock .web .MockHttpServletRequest ;
2625import org .springframework .mock .web .MockHttpServletResponse ;
2726
2827import static org .assertj .core .api .Assertions .assertThat ;
2928import static org .assertj .core .api .Assertions .assertThatIllegalArgumentException ;
29+ import static org .mockito .ArgumentMatchers .any ;
30+ import static org .mockito .Mockito .spy ;
31+ import static org .mockito .Mockito .verify ;
3032import static org .springframework .security .web .csrf .CsrfTokenAssert .assertThatCsrfToken ;
3133
3234/**
@@ -85,6 +87,15 @@ void saveToken() {
8587 assertThat (tokenCookie .isHttpOnly ()).isTrue ();
8688 }
8789
90+ // gh-14131
91+ @ Test
92+ void saveTokenShouldUseResponseAddCookie () {
93+ CsrfToken token = this .repository .generateToken (this .request );
94+ MockHttpServletResponse spyResponse = spy (this .response );
95+ this .repository .saveToken (token , this .request , spyResponse );
96+ verify (spyResponse ).addCookie (any (Cookie .class ));
97+ }
98+
8899 @ Test
89100 void saveTokenSecure () {
90101 this .request .setSecure (true );
@@ -268,7 +279,7 @@ void saveTokenWithSameSiteNull() {
268279 CsrfToken token = this .repository .generateToken (this .request );
269280 this .repository .saveToken (token , this .request , this .response );
270281 Cookie tokenCookie = this .response .getCookie (CookieCsrfTokenRepository .DEFAULT_CSRF_COOKIE_NAME );
271- assertThat ((( MockCookie ) tokenCookie ). getSameSite ( )).isNull ();
282+ assertThat (tokenCookie . getAttribute ( "SameSite" )).isNull ();
272283 }
273284
274285 @ Test
@@ -278,7 +289,7 @@ void saveTokenWithSameSiteStrict() {
278289 CsrfToken token = this .repository .generateToken (this .request );
279290 this .repository .saveToken (token , this .request , this .response );
280291 Cookie tokenCookie = this .response .getCookie (CookieCsrfTokenRepository .DEFAULT_CSRF_COOKIE_NAME );
281- assertThat ((( MockCookie ) tokenCookie ). getSameSite ( )).isEqualTo (sameSitePolicy );
292+ assertThat (tokenCookie . getAttribute ( "SameSite" )).isEqualTo (sameSitePolicy );
282293 }
283294
284295 @ Test
@@ -288,7 +299,7 @@ void saveTokenWithSameSiteLax() {
288299 CsrfToken token = this .repository .generateToken (this .request );
289300 this .repository .saveToken (token , this .request , this .response );
290301 Cookie tokenCookie = this .response .getCookie (CookieCsrfTokenRepository .DEFAULT_CSRF_COOKIE_NAME );
291- assertThat ((( MockCookie ) tokenCookie ). getSameSite ( )).isEqualTo (sameSitePolicy );
302+ assertThat (tokenCookie . getAttribute ( "SameSite" )).isEqualTo (sameSitePolicy );
292303 }
293304
294305 // gh-13075
@@ -420,7 +431,7 @@ void cookieCustomizer() {
420431 assertThat (tokenCookie .getDomain ()).isEqualTo (domainName );
421432 assertThat (tokenCookie .getPath ()).isEqualTo (customPath );
422433 assertThat (tokenCookie .isHttpOnly ()).isEqualTo (Boolean .TRUE );
423- assertThat ((( MockCookie ) tokenCookie ). getSameSite ( )).isEqualTo (sameSitePolicy );
434+ assertThat (tokenCookie . getAttribute ( "SameSite" )).isEqualTo (sameSitePolicy );
424435 }
425436
426437 // gh-13659
0 commit comments