Author: cziegeler
Date: Mon Nov 30 13:35:23 2009
New Revision: 885422
URL: http://svn.apache.org/viewvc?rev=885422&view=rev
Log:
SLING-1209 : Fix potential redirection problems.
Modified:
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
sling/trunk/launchpad/bundles/pom.xml
Modified:
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
(original)
+++
sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/RedirectServlet.java
Mon Nov 30 13:35:23 2009
@@ -146,7 +146,7 @@
postFix = null;
}
- String basePath = request.getResource().getPath();
+ String basePath = rpi.getResourcePath();
// make sure the target path is absolute
if (!targetPath.startsWith("/")) {
@@ -163,7 +163,7 @@
StringBuffer pathBuf = new StringBuffer();
- makeRelative(pathBuf, basePath, targetPath);
+ makeRelative(pathBuf, basePath, targetPath, request);
if (postFix != null) {
pathBuf.append(postFix);
@@ -181,8 +181,17 @@
* this relative path into pathBuffer.
*/
private static void makeRelative(StringBuffer pathBuffer, String base,
- String target) {
-
+ String target, SlingHttpServletRequest request) {
+ if ( base == null || base.length() == 0 ) {
+ final String ctxPath = request.getContextPath();
+ pathBuffer.append(ctxPath);
+ if ( ctxPath.endsWith("/") ) {
+ pathBuffer.append(target.substring(1));
+ } else {
+ pathBuffer.append(target);
+ }
+ return;
+ }
// pseudo entry to correctly calculate the relative path
if (base.endsWith("/")) {
base = base.concat(String.valueOf(Character.MAX_VALUE));
Modified:
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
(original)
+++
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockRequestPathInfo.java
Mon Nov 30 13:35:23 2009
@@ -28,10 +28,17 @@
private final String suffix;
+ private final String path;
+
public MockRequestPathInfo(String selectors, String extension, String
suffix) {
+ this(selectors, extension ,suffix, null);
+ }
+
+ public MockRequestPathInfo(String selectors, String extension, String
suffix, String path) {
this.selectors = selectors;
this.extension = extension;
this.suffix = suffix;
+ this.path = path;
}
public String getExtension() {
@@ -39,7 +46,7 @@
}
public String getResourcePath() {
- return null;
+ return path;
}
public String getSelectorString() {
Modified:
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
(original)
+++
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/MockSlingHttpServletRequest.java
Mon Nov 30 13:35:23 2009
@@ -56,7 +56,15 @@
String extension, String suffix, String queryString) {
this.resource = new SyntheticResource(null, resourcePath, null);
this.requestPathInfo = new MockRequestPathInfo(selectors, extension,
- suffix);
+ suffix, resourcePath);
+ this.queryString = queryString;
+ }
+
+ public MockSlingHttpServletRequest(String resourcePath, String selectors,
+ String extension, String suffix, String queryString, String
requestPath) {
+ this.resource = new SyntheticResource(null, resourcePath, null);
+ this.requestPathInfo = new MockRequestPathInfo(selectors, extension,
+ suffix, requestPath);
this.queryString = queryString;
}
@@ -127,7 +135,7 @@
}
public String getContextPath() {
- return null;
+ return "/webapp";
}
public Cookie[] getCookies() {
Modified:
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
(original)
+++
sling/trunk/bundles/servlets/get/src/test/java/org/apache/sling/servlets/get/impl/RedirectServletTest.java
Mon Nov 30 13:35:23 2009
@@ -21,7 +21,6 @@
import junit.framework.TestCase;
import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.servlets.get.impl.RedirectServlet;
public class RedirectServletTest extends TestCase {
@@ -241,4 +240,15 @@
basePath, selectors, extension, suffix, queryString);
return RedirectServlet.toRedirectPath(targetPath, request);
}
+
+ public void testEmptyPath() {
+ SlingHttpServletRequest request = new MockSlingHttpServletRequest(
+ "/", null, null, null, null, "");
+ String path = RedirectServlet.toRedirectPath("/index.html", request);
+ assertEquals("/webapp/index.html", path);
+ request = new MockSlingHttpServletRequest(
+ "/", null, null, null, null, "/");
+ path = RedirectServlet.toRedirectPath("/index.html", request);
+ assertEquals("index.html", path);
+ }
}
Modified: sling/trunk/launchpad/bundles/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/launchpad/bundles/pom.xml?rev=885422&r1=885421&r2=885422&view=diff
==============================================================================
--- sling/trunk/launchpad/bundles/pom.xml (original)
+++ sling/trunk/launchpad/bundles/pom.xml Mon Nov 30 13:35:23 2009
@@ -266,7 +266,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.servlets.get</artifactId>
- <version>2.0.6</version>
+ <version>2.0.7-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>