From 5b4b554d1164bdba46ca33adb6e2c1463e65cbf5 Mon Sep 17 00:00:00 2001 From: JCgH4164838Gh792C124B5 <43964333+JCgH4164838Gh792C124B5@users.noreply.github.com> Date: Tue, 17 Sep 2019 22:22:41 -0400 Subject: [PATCH] Minor improvement proposed for ServletRedirectResult sendRedirect() Supply log warning when an IOException or IllegalStateException occurs to better allow developers to track the failed redirect location and status details. The exceptions are re-thrown to ensure existing flow-control behaviour is preserved. When getWriter() is called, utilize a finally block to ensure close is called. --- .../struts2/result/ServletRedirectResult.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java index 0879ab06d..704f80ab6 100644 --- a/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java +++ b/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java @@ -250,13 +250,24 @@ public class ServletRedirectResult extends StrutsResultSupport implements Reflec * @throws IOException in case of IO errors */ protected void sendRedirect(HttpServletResponse response, String finalLocation) throws IOException { - if (SC_FOUND == statusCode) { - response.sendRedirect(finalLocation); - } else { - response.setStatus(statusCode); - response.setHeader("Location", finalLocation); - response.getWriter().write(finalLocation); - response.getWriter().close(); + try { + if (SC_FOUND == statusCode) { + response.sendRedirect(finalLocation); + } else { + response.setStatus(statusCode); + response.setHeader("Location", finalLocation); + try { + response.getWriter().write(finalLocation); + } finally { + response.getWriter().close(); + } + } + } catch (IOException ioe) { + LOG.warn("Unable to redirect to: {}, code: {}! (IOException): {}", finalLocation, statusCode, ioe.toString()); + throw ioe; // Re-throw required to preserve existing default behaviour + } catch (IllegalStateException ise) { + LOG.warn("Unable to redirect to: {}, code: {}! isCommited: {}. (IllegalStateException): {}", finalLocation, statusCode, response.isCommitted(), ise.toString()); + throw ise; // Re-throw required to preserve existing default behaviour } }