diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java index f2c3cdec7c..95447f3425 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/FormResubmitSupport.java @@ -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 { @@ -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); @@ -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); } } @@ -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 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) { @@ -486,7 +487,7 @@ private static String processResubmitResponse(HttpResponse 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( diff --git a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java index 3850e30dfc..bd00a64401 100644 --- a/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java +++ b/support/jakarta-ee/src/main/java/org/apache/shiro/ee/filters/ShiroFilter.java @@ -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);