Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ private static void doRedirectToSaved(HttpServletRequest request, HttpServletRes
String formData = getSavedFormDataFromKey(savedFormDataKey);
if (formData != null) {
Optional.ofNullable(resubmitSavedForm(formData, savedRequest,
request, response, request.getServletContext(), false))
request, response, request.getServletContext(), false, true))
.ifPresent(path -> doFacesRedirect(request, response, path));
doRedirectAtEnd = false;
} else {
Expand Down Expand Up @@ -369,7 +369,7 @@ static boolean isLoginUrl(HttpServletRequest request) {

static String resubmitSavedForm(@NonNull String savedFormData, @NonNull String savedRequest,
HttpServletRequest originalRequest, HttpServletResponse originalResponse,
ServletContext servletContext, boolean rememberedAjaxResubmit)
ServletContext servletContext, boolean rememberedAjaxResubmit, boolean redirect)
throws InterruptedException, IOException {
if (log.isDebugEnabled()) {
log.debug("saved form data: {}", savedFormData);
Expand Down Expand Up @@ -401,12 +401,13 @@ static String resubmitSavedForm(@NonNull String savedFormData, @NonNull String s
var redirectResponse = client.send(redirectRequest, HttpResponse.BodyHandlers.ofString());
log.debug("Redirect request: {}, response: {}", redirectRequest, redirectResponse);
return processResubmitResponse(redirectResponse, originalRequest, originalResponse,
response.headers(), savedRequest, servletContext, true, rememberedAjaxResubmit);
response.headers(), savedRequest, servletContext,
true, rememberedAjaxResubmit, redirect);
} else {
deleteCookie(originalResponse, servletContext, SHIRO_FORM_DATA_KEY);
return processResubmitResponse(response, originalRequest, originalResponse,
response.headers(), savedRequest, servletContext,
decodedFormData.isPartialAjaxRequest, rememberedAjaxResubmit);
decodedFormData.isPartialAjaxRequest, rememberedAjaxResubmit, redirect);
}
}

Expand Down Expand Up @@ -465,11 +466,11 @@ private static PartialAjaxResult parseFormData(String savedFormData, URI savedRe
return noJSFAjaxRequests(savedFormData, isStateless);
}

@SuppressWarnings("fallthrough")
@SuppressWarnings({"fallthrough", "checkstyle:ParameterNumber"})
private static String processResubmitResponse(HttpResponse<String> response,
HttpServletRequest originalRequest, HttpServletResponse originalResponse,
HttpHeaders headers, String savedRequest, ServletContext servletContext,
boolean isPartialAjaxRequest, boolean rememberedAjaxResubmit) throws IOException {
boolean isPartialAjaxRequest, boolean rememberedAjaxResubmit, boolean redirect) throws IOException {
switch (response.statusCode()) {
case FOUND:
if (rememberedAjaxResubmit) {
Expand All @@ -486,7 +487,7 @@ private static String processResubmitResponse(HttpResponse<String> response,
.startsWith(getSessionCookieName(servletContext, getSecurityManager()))))
.forEach(entry -> addCookie(originalResponse, servletContext,
entry.getKey(), entry.getValue(), -1));
if (response.statusCode() == FOUND && isPartialAjaxRequest) {
if ((response.statusCode() == FOUND || redirect) && isPartialAjaxRequest) {
originalResponse.setHeader(CONTENT_TYPE, TEXT_XML);
originalResponse.setCharacterEncoding(StandardCharsets.UTF_8.name());
originalResponse.getWriter().append(String.format(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ protected void executeChain(ServletRequest request, ServletResponse response,
Optional.ofNullable(resubmitSavedForm(postData,
Servlets.getRequestURLWithQueryString(httpRequest),
WebUtils.toHttp(request), WebUtils.toHttp(response),
request.getServletContext(), rememberedAjaxResubmit))
request.getServletContext(), rememberedAjaxResubmit, false))
.ifPresent(url -> sendRedirect(response, url));
} else {
setCharacterEncodingIfNeeded(request);
Expand Down
Loading