This is an automated email from the ASF dual-hosted git repository.
lprimak pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shiro.git
The following commit(s) were added to refs/heads/main by this push:
new f556a12e7 bugfix(jakarta-ee): form resubmit: login submit response
processing fixed (#2632)
f556a12e7 is described below
commit f556a12e76ab2fad34ddc6731a980f721561aae9
Author: Lenny Primak <[email protected]>
AuthorDate: Sun Mar 15 00:09:16 2026 -0500
bugfix(jakarta-ee): form resubmit: login submit response processing fixed
(#2632)
---
.../org/apache/shiro/ee/filters/FormResubmitSupport.java | 15 ++++++++-------
.../java/org/apache/shiro/ee/filters/ShiroFilter.java | 2 +-
2 files changed, 9 insertions(+), 8 deletions(-)
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 f2c3cdec7..95447f342 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 @@ public class FormResubmitSupport {
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 @@ public class FormResubmitSupport {
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 @@ public class FormResubmitSupport {
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 @@ public class FormResubmitSupport {
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) {
@@ -486,7 +487,7 @@ public class FormResubmitSupport {
.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 3850e30df..bd00a6440 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 @@ public class ShiroFilter extends
org.apache.shiro.web.servlet.ShiroFilter {
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);