Skip to content

Commit 857ef6f

Browse files
kse-musicjzheaux
authored andcommitted
WithHttpOnlyCookie defaults to false
Closes gh-16820 Signed-off-by: DingHao <[email protected]>
1 parent b7df861 commit 857ef6f

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -84,7 +84,7 @@ public void setCookieCustomizer(Consumer<ResponseCookie.ResponseCookieBuilder> c
8484
*/
8585
public static CookieServerCsrfTokenRepository withHttpOnlyFalse() {
8686
CookieServerCsrfTokenRepository result = new CookieServerCsrfTokenRepository();
87-
result.setCookieCustomizer((cookie) -> cookie.httpOnly(false));
87+
result.cookieHttpOnly = false;
8888
return result;
8989
}
9090

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

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -290,6 +290,21 @@ void loadTokenWhenCookieExistsWithNullValue() {
290290
loadAndAssertExpectedValues();
291291
}
292292

293+
// gh-16820
294+
@Test
295+
void withHttpOnlyFalseWhenCookieCustomizerThenStillDefaultsToFalse() {
296+
CookieServerCsrfTokenRepository repository = CookieServerCsrfTokenRepository.withHttpOnlyFalse();
297+
repository.setCookieCustomizer((customizer) -> customizer.maxAge(1000));
298+
MockServerHttpRequest.BaseBuilder<?> request = MockServerHttpRequest.get("/dummy");
299+
MockServerWebExchange exchange = MockServerWebExchange.from(request);
300+
CsrfToken csrfToken = repository.generateToken(exchange).block();
301+
repository.saveToken(exchange, csrfToken).block();
302+
ResponseCookie cookie = exchange.getResponse().getCookies().getFirst("XSRF-TOKEN");
303+
assertThat(cookie).isNotNull();
304+
assertThat(cookie.getMaxAge().getSeconds()).isEqualTo(1000);
305+
assertThat(cookie.isHttpOnly()).isEqualTo(Boolean.FALSE);
306+
}
307+
293308
private void setExpectedHeaderName(String expectedHeaderName) {
294309
this.csrfTokenRepository.setHeaderName(expectedHeaderName);
295310
this.expectedHeaderName = expectedHeaderName;

0 commit comments

Comments
 (0)