Skip to content

Commit 52c7141

Browse files
o1i0jzheaux
authored andcommitted
Save Request Before Response Is Committed
Specifically important for cookie-based authorization request repositories. Closes gh-11602
1 parent 14a48ea commit 52c7141

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/web/OAuth2AuthorizationRequestRedirectFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
192192
if (authorizationRequest == null) {
193193
throw authzEx;
194194
}
195-
this.sendRedirectForAuthorization(request, response, authorizationRequest);
196195
this.requestCache.saveRequest(request, response);
196+
this.sendRedirectForAuthorization(request, response, authorizationRequest);
197197
}
198198
catch (Exception failed) {
199199
this.unsuccessfulRedirectForAuthorization(request, response, failed);

oauth2/oauth2-client/src/test/java/org/springframework/security/oauth2/client/web/OAuth2AuthorizationRequestRedirectFilterTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
4949
import static org.mockito.ArgumentMatchers.any;
5050
import static org.mockito.BDDMockito.given;
51+
import static org.mockito.BDDMockito.willAnswer;
5152
import static org.mockito.BDDMockito.willThrow;
5253
import static org.mockito.Mockito.mock;
5354
import static org.mockito.Mockito.times;
@@ -333,4 +334,22 @@ public void doFilterWhenAuthorizationRequestAndCustomAuthorizationRequestUriSetT
333334
+ "login_hint=user@provider\\.com");
334335
}
335336

337+
// gh-11602
338+
339+
@Test
340+
public void doFilterWhenNotAuthorizationRequestAndClientAuthorizationRequiredExceptionThrownThenSaveRequestBeforeCommitted()
341+
throws Exception {
342+
String requestUri = "/path";
343+
MockHttpServletRequest request = new MockHttpServletRequest("GET", requestUri);
344+
request.setServletPath(requestUri);
345+
MockHttpServletResponse response = new MockHttpServletResponse();
346+
FilterChain filterChain = mock(FilterChain.class);
347+
willAnswer((invocation) -> assertThat((invocation.<HttpServletResponse>getArgument(1)).isCommitted()).isFalse())
348+
.given(this.requestCache).saveRequest(any(HttpServletRequest.class), any(HttpServletResponse.class));
349+
willThrow(new ClientAuthorizationRequiredException(this.registration1.getRegistrationId())).given(filterChain)
350+
.doFilter(any(ServletRequest.class), any(ServletResponse.class));
351+
this.filter.doFilter(request, response, filterChain);
352+
assertThat(response.isCommitted()).isTrue();
353+
}
354+
336355
}

0 commit comments

Comments
 (0)