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 16
16
17
17
package org .springframework .security .web .savedrequest ;
18
18
19
+ import jakarta .servlet .DispatcherType ;
19
20
import jakarta .servlet .http .HttpServletRequest ;
20
21
import jakarta .servlet .http .HttpServletResponse ;
21
22
import jakarta .servlet .http .HttpSession ;
38
39
*
39
40
* @author Luke Taylor
40
41
* @author Eddú Meléndez
42
+ * @author Andrey Litvitski
41
43
* @since 3.0
42
44
*/
43
45
public class HttpSessionRequestCache implements RequestCache {
@@ -61,6 +63,17 @@ public class HttpSessionRequestCache implements RequestCache {
61
63
*/
62
64
@ Override
63
65
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
+
64
77
if (!this .requestMatcher .matches (request )) {
65
78
if (this .logger .isTraceEnabled ()) {
66
79
this .logger
Original file line number Diff line number Diff line change 21
21
import java .util .Locale ;
22
22
import java .util .Map ;
23
23
24
+ import jakarta .servlet .DispatcherType ;
24
25
import jakarta .servlet .http .Cookie ;
25
26
import jakarta .servlet .http .HttpServletRequest ;
26
27
import jakarta .servlet .http .HttpServletResponse ;
40
41
/**
41
42
* @author Luke Taylor
42
43
* @author Eddú Meléndez
44
+ * @author Andrey Litvitski
43
45
* @since 3.0
44
46
*/
45
47
public class HttpSessionRequestCacheTests {
@@ -168,6 +170,18 @@ public void getMatchingRequestWhenMatchingRequestParameterNameSetThenDoesNotInvo
168
170
verify (request , never ()).getParameterMap ();
169
171
}
170
172
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
+
171
185
private static final class CustomSavedRequest implements SavedRequest {
172
186
173
187
private final SavedRequest delegate ;
You can’t perform that action at this time.
0 commit comments