File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed
main/java/org/springframework/security/web/savedrequest
test/java/org/springframework/security/web/savedrequest Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change 1616
1717package org .springframework .security .web .savedrequest ;
1818
19+ import jakarta .servlet .DispatcherType ;
1920import jakarta .servlet .http .HttpServletRequest ;
2021import jakarta .servlet .http .HttpServletResponse ;
2122import jakarta .servlet .http .HttpSession ;
3839 *
3940 * @author Luke Taylor
4041 * @author Eddú Meléndez
42+ * @author Andrey Litvitski
4143 * @since 3.0
4244 */
4345public class HttpSessionRequestCache implements RequestCache {
@@ -61,6 +63,17 @@ public class HttpSessionRequestCache implements RequestCache {
6163 */
6264 @ Override
6365 public void saveRequest (HttpServletRequest request , HttpServletResponse response ) {
66+ boolean documentRequest = "document" .equals (request .getHeader ("Sec-Fetch-Dest" ));
67+ boolean dispatchError = DispatcherType .ERROR .equals (request .getDispatcherType ());
68+
69+ if (!documentRequest && dispatchError ) {
70+ if (this .logger .isTraceEnabled ()) {
71+ this .logger .trace (LogMessage .format (
72+ "Did not save request because it is an ERROR dispatcher and not a primary document request" ));
73+ }
74+ return ;
75+ }
76+
6477 if (!this .requestMatcher .matches (request )) {
6578 if (this .logger .isTraceEnabled ()) {
6679 this .logger
Original file line number Diff line number Diff line change 2121import java .util .Locale ;
2222import java .util .Map ;
2323
24+ import jakarta .servlet .DispatcherType ;
2425import jakarta .servlet .http .Cookie ;
2526import jakarta .servlet .http .HttpServletRequest ;
2627import jakarta .servlet .http .HttpServletResponse ;
4041/**
4142 * @author Luke Taylor
4243 * @author Eddú Meléndez
44+ * @author Andrey Litvitski
4345 * @since 3.0
4446 */
4547public class HttpSessionRequestCacheTests {
@@ -168,6 +170,18 @@ public void getMatchingRequestWhenMatchingRequestParameterNameSetThenDoesNotInvo
168170 verify (request , never ()).getParameterMap ();
169171 }
170172
173+ // gh-17686
174+ @ Test
175+ public void saveRequestShouldNotSaveRequestWhenErrorDispatcherAndNonDocumentRequest () {
176+ HttpSessionRequestCache cache = new HttpSessionRequestCache ();
177+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/destination" );
178+ request .setDispatcherType (DispatcherType .ERROR );
179+ request .addHeader ("Sec-Fetch-Dest" , "image" );
180+ MockHttpServletResponse response = new MockHttpServletResponse ();
181+ cache .saveRequest (request , response );
182+ assertThat (request .getSession ().getAttribute (HttpSessionRequestCache .SAVED_REQUEST )).isNull ();
183+ }
184+
171185 private static final class CustomSavedRequest implements SavedRequest {
172186
173187 private final SavedRequest delegate ;
You can’t perform that action at this time.
0 commit comments