Skip to content

Commit 8e21a54

Browse files
committed
Add cookie customizer to CookieRequestCache
Issue gh-15204
1 parent e90a6b6 commit 8e21a54

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

web/src/main/java/org/springframework/security/web/savedrequest/CookieRequestCache.java

+15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.Base64;
2020
import java.util.Collections;
21+
import java.util.function.Consumer;
2122

2223
import jakarta.servlet.http.Cookie;
2324
import jakarta.servlet.http.HttpServletRequest;
@@ -51,6 +52,9 @@ public class CookieRequestCache implements RequestCache {
5152

5253
private static final int COOKIE_MAX_AGE = -1;
5354

55+
private Consumer<Cookie> cookieCustomizer = (cookie) -> {
56+
};
57+
5458
@Override
5559
public void saveRequest(HttpServletRequest request, HttpServletResponse response) {
5660
if (!this.requestMatcher.matches(request)) {
@@ -63,6 +67,7 @@ public void saveRequest(HttpServletRequest request, HttpServletResponse response
6367
savedCookie.setSecure(request.isSecure());
6468
savedCookie.setPath(getCookiePath(request));
6569
savedCookie.setHttpOnly(true);
70+
this.cookieCustomizer.accept(savedCookie);
6671
response.addCookie(savedCookie);
6772
}
6873

@@ -152,4 +157,14 @@ public void setRequestMatcher(RequestMatcher requestMatcher) {
152157
this.requestMatcher = requestMatcher;
153158
}
154159

160+
/**
161+
* Sets the {@link Consumer}, allowing customization of cookie.
162+
* @param cookieCustomizer customize for cookie
163+
* @since 6.4
164+
*/
165+
public void setCookieCustomizer(Consumer<Cookie> cookieCustomizer) {
166+
Assert.notNull(cookieCustomizer, "cookieCustomizer cannot be null");
167+
this.cookieCustomizer = cookieCustomizer;
168+
}
169+
155170
}

web/src/test/java/org/springframework/security/web/savedrequest/CookieRequestCacheTests.java

+17
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Base64;
2121
import java.util.Collections;
2222
import java.util.Locale;
23+
import java.util.function.Consumer;
2324

2425
import jakarta.servlet.http.Cookie;
2526
import jakarta.servlet.http.HttpServletRequest;
@@ -204,6 +205,22 @@ public void matchingRequestWhenMatchThenKeepOriginalRequestLocale() {
204205
assertThat(Collections.list(matchingRequest.getLocales())).contains(Locale.FRENCH, Locale.GERMANY);
205206
}
206207

208+
@Test
209+
public void setCookieCustomizer() {
210+
Consumer<Cookie> cookieCustomizer = (cookie) -> {
211+
cookie.setAttribute("SameSite", "Strict");
212+
cookie.setAttribute("CustomAttribute", "CustomValue");
213+
};
214+
CookieRequestCache cookieRequestCache = new CookieRequestCache();
215+
cookieRequestCache.setCookieCustomizer(cookieCustomizer);
216+
MockHttpServletResponse response = new MockHttpServletResponse();
217+
cookieRequestCache.saveRequest(new MockHttpServletRequest(), response);
218+
Cookie savedCookie = response.getCookie(DEFAULT_COOKIE_NAME);
219+
assertThat(savedCookie).isNotNull();
220+
assertThat(savedCookie.getAttribute("SameSite")).isEqualTo("Strict");
221+
assertThat(savedCookie.getAttribute("CustomAttribute")).isEqualTo("CustomValue");
222+
}
223+
207224
private static String encodeCookie(String cookieValue) {
208225
return Base64.getEncoder().encodeToString(cookieValue.getBytes());
209226
}

0 commit comments

Comments
 (0)