Updated Branches:
  refs/heads/master 81165d82d -> 66e71ae88

WICKET-4891 handle composed context and filter paths, remove all prefix
or none

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/66e71ae8
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/66e71ae8
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/66e71ae8

Branch: refs/heads/master
Commit: 66e71ae882f8f6ef881891ce6c16805e8505d71d
Parents: 81165d8
Author: svenmeier <[email protected]>
Authored: Tue Nov 27 16:07:01 2012 +0100
Committer: svenmeier <[email protected]>
Committed: Tue Nov 27 16:07:01 2012 +0100

----------------------------------------------------------------------
 .../wicket/request/cycle/UrlRendererTest.java      |   58 ++++++++++++--
 .../org/apache/wicket/request/UrlRenderer.java     |   44 ++++-------
 2 files changed, 66 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/66e71ae8/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
index 1f3cc56..c706593 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
@@ -174,9 +174,9 @@ public class UrlRendererTest extends Assert
        }
 
        /**
-        * Verify that absolute urls are rendered as is, ignoring
-        * the current client url and base url completely.
-        *
+        * Verify that absolute urls are rendered as is, ignoring the current 
client url and base url
+        * completely.
+        * 
         * https://issues.apache.org/jira/browse/WICKET-4466
         */
        @Test
@@ -214,7 +214,8 @@ public class UrlRendererTest extends Assert
                baseUrl.setPort(8888);
                UrlRenderer renderer = new UrlRenderer(new 
MockWebRequest(baseUrl));
                renderer.setBaseUrl(baseUrl); // this is needed because 
MockWebRequest cuts data
-               String fullUrl = renderer.renderFullUrl(Url.parse("/four")); // 
url starting with slash is considered absolute
+               String fullUrl = renderer.renderFullUrl(Url.parse("/four")); // 
url starting with slash is
+// considered absolute
                assertEquals("http://www.example.com:8888/four";, fullUrl);
        }
 
@@ -303,13 +304,27 @@ public class UrlRendererTest extends Assert
        }
 
        @Test
+       public void 
renderFullUrlAsRelativeToBaseUrlWithoutComposedContextAndFilterPaths()
+       {
+               Url baseUrl = Url.parse("a/b/c/d"); // base url without context 
path and filter path
+               Url encodedFullUrl = 
Url.parse("http://host:8080/context/path/filter/path/a/b;jsessionid=123456";);
+
+               MockWebRequest request = new MockWebRequest(baseUrl);
+               request.setContextPath("context/path");
+               request.setFilterPath("filter/path");
+               UrlRenderer renderer = new UrlRenderer(request);
+               String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);
+
+               assertEquals("../../b;jsessionid=123456", encodedRelativeUrl);
+       }
+
+       @Test
        public void renderFullUrlAsRelativeToBaseUrlWithoutContextPath()
        {
                Url baseUrl = Url.parse("a/b/c/d"); // base url without context 
path and filter path
                Url encodedFullUrl = 
Url.parse("http://host:8080/filterPath/a/b;jsessionid=123456";);
 
                MockWebRequest request = new MockWebRequest(baseUrl);
-               request.setContextPath("contextPath");
                request.setFilterPath("filterPath");
                UrlRenderer renderer = new UrlRenderer(request);
                String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);
@@ -318,6 +333,20 @@ public class UrlRendererTest extends Assert
        }
 
        @Test
+       public void renderFullUrlAsRelativeToBaseUrlWithoutComposedContextPath()
+       {
+               Url baseUrl = Url.parse("a/b/c/d"); // base url without context 
path and filter path
+               Url encodedFullUrl = 
Url.parse("http://host:8080/filter/path/a/b;jsessionid=123456";);
+
+               MockWebRequest request = new MockWebRequest(baseUrl);
+               request.setFilterPath("filter/path");
+               UrlRenderer renderer = new UrlRenderer(request);
+               String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);
+
+               assertEquals("../../b;jsessionid=123456", encodedRelativeUrl);
+       }
+
+       @Test
        public void renderFullUrlAsRelativeToBaseUrlWithoutFilterPath()
        {
                Url baseUrl = Url.parse("a/b/c/d"); // base url without context 
path and filter path
@@ -325,7 +354,20 @@ public class UrlRendererTest extends Assert
 
                MockWebRequest request = new MockWebRequest(baseUrl);
                request.setContextPath("contextPath");
-               request.setFilterPath("filterPath");
+               UrlRenderer renderer = new UrlRenderer(request);
+               String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);
+
+               assertEquals("../../b;jsessionid=123456", encodedRelativeUrl);
+       }
+
+       @Test
+       public void renderFullUrlAsRelativeToBaseUrlWithoutComposedFilterPath()
+       {
+               Url baseUrl = Url.parse("a/b/c/d"); // base url without context 
path and filter path
+               Url encodedFullUrl = 
Url.parse("http://host:8080/context/path/a/b;jsessionid=123456";);
+
+               MockWebRequest request = new MockWebRequest(baseUrl);
+               request.setContextPath("context/path");
                UrlRenderer renderer = new UrlRenderer(request);
                String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);
 
@@ -344,7 +386,6 @@ public class UrlRendererTest extends Assert
 
                MockWebRequest request = new MockWebRequest(baseUrl);
                request.setContextPath("contextPath");
-               request.setFilterPath("filterPath");
                UrlRenderer renderer = new UrlRenderer(request);
                String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);
 
@@ -377,11 +418,10 @@ public class UrlRendererTest extends Assert
                // 'filterPath' here is a normal segment with the same value
                Url baseUrl = Url.parse("filterPath/a/b/c/d");
 
-               // here 'contextPath' is the actual context path and should be 
ignored
+               // here 'filterPath' is the actual filter path and should be 
ignored
                Url encodedFullUrl = 
Url.parse("http://host:8080/filterPath/a/b;jsessionid=123456";);
 
                MockWebRequest request = new MockWebRequest(baseUrl);
-               request.setContextPath("contextPath");
                request.setFilterPath("filterPath");
                UrlRenderer renderer = new UrlRenderer(request);
                String encodedRelativeUrl = 
renderer.renderRelativeUrl(encodedFullUrl);

http://git-wip-us.apache.org/repos/asf/wicket/blob/66e71ae8/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
----------------------------------------------------------------------
diff --git 
a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java 
b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
index 028dd01..4217fbe 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
@@ -275,46 +275,36 @@ public class UrlRenderer
        }
 
        /**
-        * Removes common prefixes like empty first segment, context path and 
filter path
-        *
+        * Removes common prefixes like empty first segment, context path and 
filter path.
+        * 
         * @param request
-        *      the current web request
+        *            the current web request
         * @param segments
-        *      the segments to clean
+        *            the segments to clean
         */
        private void removeCommonPrefixes(Request request, List<String> 
segments)
        {
-               if (segments.isEmpty())
+               // try to remove context/filter path only if the Url starts 
with '/',
+               // i.e. has an empty segment in the beginning
+               if (segments.isEmpty() || "".equals(segments.get(0)) == false)
                {
                        return;
                }
 
-               if ("".equals(segments.get(0)))
-               {
-                       LOG.debug("Removing an empty first segment from '{}'", 
segments);
-                       segments.remove(0);
+               Url commonPrefix = Url.parse(request.getContextPath() + 
request.getFilterPath());
 
-                       // try to remove context/filter path only if the Url 
starts with '/',
-                       //  i.e. has an empty segment in the beginning
-                       String contextPath = request.getContextPath();
-                       if (contextPath != null && segments.isEmpty() == false)
+               for (int i = 0; i < commonPrefix.getSegments().size() && i < 
segments.size(); i++)
+               {
+                       if 
(commonPrefix.getSegments().get(i).equals(segments.get(i)) == false)
                        {
-                               if 
(contextPath.equals(UrlUtils.normalizePath(segments.get(0))))
-                               {
-                                       LOG.debug("Removing the context path 
'{}' from '{}'", contextPath, segments);
-                                       segments.remove(0);
-                               }
+                               LOG.debug("Segments '{}' do not start with 
common prefix '{}'", segments, commonPrefix);
+                               return;
                        }
+               }
 
-                       String filterPath = request.getFilterPath();
-                       if (filterPath != null && segments.isEmpty() == false)
-                       {
-                               if 
(filterPath.equals(UrlUtils.normalizePath(segments.get(0))))
-                               {
-                                       LOG.debug("Removing the filter path 
'{}' from '{}'", filterPath, segments);
-                                       segments.remove(0);
-                               }
-                       }
+               for (int i = 0; i < commonPrefix.getSegments().size(); i++)
+               {
+                       segments.remove(0);
                }
        }
 

Reply via email to