From 2cf6cf5bcf5de2dcb993fc2804d0f86cf81b3500 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Wed, 26 Sep 2012 19:27:41 +0000 Subject: [PATCH] WW-3879 Changes logic when the location is path and when full url address git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1390692 13f79535-47bb-0310-9956-ffa450edef68 --- .../struts2/dispatcher/ServletRedirectResult.java | 10 ++++++---- .../dispatcher/ServletRedirectResultTest.java | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java index a843a5bb9..de37f0a7c 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java @@ -250,11 +250,13 @@ public class ServletRedirectResult extends StrutsResultSupport implements Reflec } - private static boolean isPathUrl(String url) { + private boolean isPathUrl(String url) { // filter out "http:", "https:", "mailto:", "file:", "ftp:" - // since the only valid places for : in URL's is before the path specification - // either before the port, or after the protocol - return (url.indexOf(':') == -1); + return !url.startsWith("http:") + && !url.startsWith("https:") + && !url.startsWith("mailto:") + && !url.startsWith("file:") + && !url.startsWith("ftp:"); } /** diff --git a/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java index 7d8606353..6be315bf3 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java @@ -79,6 +79,20 @@ public class ServletRedirectResultTest extends StrutsTestCase implements StrutsS } } + public void testFullUrlRedirect() { + view.setLocation("http://localhost/bar/foo.jsp"); + responseMock.expect("sendRedirect", C.args(C.eq("http://localhost/bar/foo.jsp"))); + + try { + view.execute(ai); + requestMock.verify(); + responseMock.verify(); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } + } + public void testAbsoluteRedirect303() { view.setLocation("/bar/foo.jsp"); view.setStatusCode(303);