You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2019/09/02 13:56:04 UTC
svn commit: r1866280 - in /jackrabbit/trunk:
jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/
jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/
jackrabbit-webdav/src/main/java/org/apache/jackrabbi...
Author: reschke
Date: Mon Sep 2 13:56:03 2019
New Revision: 1866280
URL: http://svn.apache.org/viewvc?rev=1866280&view=rev
Log:
JCR-4458: When JcrRemotingServlet deployed on non-root context, AclResource Webdav request fails (patch by woon_san)
Added:
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestContext.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextHolder.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextImpl.java (with props)
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/AbstractReport.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/AbstractJcrReport.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AbstractSecurityReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AclPrincipalReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/SearchablePropertyReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/package-info.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/CompareBaselineReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LatestActivityVersionReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/package-info.java
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java Mon Sep 2 13:56:03 2019
@@ -26,6 +26,8 @@ import org.apache.jackrabbit.webdav.DavS
import org.apache.jackrabbit.webdav.DavSession;
import org.apache.jackrabbit.webdav.MultiStatus;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
+import org.apache.jackrabbit.webdav.WebdavRequest;
+import org.apache.jackrabbit.webdav.WebdavRequestContext;
import org.apache.jackrabbit.webdav.DavCompliance;
import org.apache.jackrabbit.webdav.jcr.property.JcrDavPropertyNameSet;
import org.apache.jackrabbit.webdav.util.HttpDateFormat;
@@ -53,6 +55,7 @@ import org.apache.jackrabbit.webdav.prop
import org.apache.jackrabbit.webdav.search.QueryGrammerSet;
import org.apache.jackrabbit.webdav.search.SearchInfo;
import org.apache.jackrabbit.webdav.search.SearchResource;
+import org.apache.jackrabbit.webdav.server.WebdavRequestContextHolder;
import org.apache.jackrabbit.webdav.transaction.TransactionConstants;
import org.apache.jackrabbit.webdav.transaction.TransactionInfo;
import org.apache.jackrabbit.webdav.transaction.TransactionResource;
@@ -759,6 +762,33 @@ abstract class AbstractResource implemen
return HttpDateFormat.creationDateFormat().format(new Date(0));
}
+ /**
+ * Normalize the resource {@code href}. For example, remove contextPath prefix if found.
+ * @param href resource href
+ * @return normalized resource {@code href}
+ */
+ protected String normalizeResourceHref(final String href) {
+ if (href == null) {
+ return href;
+ }
+
+ final WebdavRequestContext requestContext = WebdavRequestContextHolder.getContext();
+ final WebdavRequest request = (requestContext != null) ? requestContext.getRequest() : null;
+
+ if (request == null) {
+ log.error("WebdavRequest is unavailable in the current execution context.");
+ return href;
+ }
+
+ final String contextPath = request.getContextPath();
+
+ if (!contextPath.isEmpty() && href.startsWith(contextPath)) {
+ return href.substring(contextPath.length());
+ }
+
+ return href;
+ }
+
//--------------------------------------------------------------------------
/**
* Register the specified event listener with the observation manager present
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java Mon Sep 2 13:56:03 2019
@@ -400,7 +400,8 @@ public class VersionControlledItemCollec
throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Invalid update request body missing version href or containing multiple version hrefs.");
}
- String versionPath = getLocatorFromHref(hrefs[0]).getRepositoryPath();
+ final String href = normalizeResourceHref(hrefs[0]);
+ String versionPath = getLocatorFromHref(href).getRepositoryPath();
String versionName = getItemName(versionPath);
String relPath = DomUtil.getChildText(udElem, XML_RELPATH, NAMESPACE);
@@ -423,7 +424,7 @@ public class VersionControlledItemCollec
node.restoreByLabel(labels[0], removeExisting);
} else if (updateInfo.getWorkspaceHref() != null) {
- String href = obtainAbsolutePathFromUri(updateInfo.getWorkspaceHref());
+ String href = normalizeResourceHref(obtainAbsolutePathFromUri(updateInfo.getWorkspaceHref()));
String workspaceName = getLocatorFromHref(href).getWorkspaceName();
node.update(workspaceName);
} else {
@@ -469,7 +470,8 @@ public class VersionControlledItemCollec
// resources that got modified by this merge operation -> omitted.
// todo: RFC allows multiple href elements inside the DAV:source element
- String workspaceName = getLocatorFromHref(mergeInfo.getSourceHrefs()[0]).getWorkspaceName();
+ final String href = normalizeResourceHref(mergeInfo.getSourceHrefs()[0]);
+ String workspaceName = getLocatorFromHref(href).getWorkspaceName();
String depth = DomUtil.getChildTextTrim(mergeInfo.getMergeElement(), DavConstants.XML_DEPTH, DavConstants.NAMESPACE);
boolean isShallow = "0".equals(depth);
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/WorkspaceResourceImpl.java Mon Sep 2 13:56:03 2019
@@ -537,7 +537,8 @@ public class WorkspaceResourceImpl exten
// perform the update/restore according to the update info
Version[] versions = new Version[hrefs.length];
for (int i = 0; i < hrefs.length; i++) {
- DavResourceLocator vLoc = getLocator().getFactory().createResourceLocator(getLocator().getPrefix(), hrefs[i]);
+ final String href = normalizeResourceHref(hrefs[i]);
+ DavResourceLocator vLoc = getLocator().getFactory().createResourceLocator(getLocator().getPrefix(), href);
String versionPath = vLoc.getRepositoryPath();
Item item = getRepositorySession().getItem(versionPath);
if (item instanceof Version) {
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/AbstractJcrReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/AbstractJcrReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/AbstractJcrReport.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/AbstractJcrReport.java Mon Sep 2 13:56:03 2019
@@ -16,21 +16,22 @@
*/
package org.apache.jackrabbit.webdav.jcr.version.report;
+import javax.jcr.Session;
+
import org.apache.jackrabbit.webdav.DavConstants;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.DavSession;
import org.apache.jackrabbit.webdav.jcr.JcrDavSession;
+import org.apache.jackrabbit.webdav.version.report.AbstractReport;
import org.apache.jackrabbit.webdav.version.report.Report;
import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import javax.jcr.Session;
-
/**
* <code>AbstractJcrReport</code>...
*/
-public abstract class AbstractJcrReport implements Report {
+public abstract class AbstractJcrReport extends AbstractReport {
private Session session;
private ReportInfo reportInfo;
@@ -80,4 +81,4 @@ public abstract class AbstractJcrReport
ReportInfo getReportInfo() {
return reportInfo;
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/JcrPrivilegeReport.java Mon Sep 2 13:56:03 2019
@@ -107,7 +107,7 @@ public class JcrPrivilegeReport extends
// immediately build the final multistatus element
Element hrefElem = info.getContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE);
String href = DomUtil.getTextTrim(hrefElem);
- href = obtainAbsolutePathFromUri(href); // TODO: we should check whether the authority component matches
+ href = normalizeResourceHref(obtainAbsolutePathFromUri(href)); // TODO: we should check whether the authority component matches
DavResourceLocator resourceLoc = resource.getLocator();
DavResourceLocator loc = resourceLoc.getFactory().createResourceLocator(resourceLoc.getPrefix(), href);
// immediately build the final multistatus element
@@ -159,4 +159,4 @@ public class JcrPrivilegeReport extends
return uri;
}
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java Mon Sep 2 13:56:03 2019
@@ -102,7 +102,7 @@ public class LocateCorrespondingNodeRepo
super.init(resource, info);
// specific for this report: a workspace href must be provided
Element workspace = info.getContentElement(DeltaVConstants.WORKSPACE.getName(), DeltaVConstants.WORKSPACE.getNamespace());
- String workspaceHref = DomUtil.getChildTextTrim(workspace, DavConstants.XML_HREF, DavConstants.NAMESPACE);
+ String workspaceHref = normalizeResourceHref(DomUtil.getChildTextTrim(workspace, DavConstants.XML_HREF, DavConstants.NAMESPACE));
if (workspaceHref == null || "".equals(workspaceHref)) {
throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Request body must define the href of a source workspace");
}
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestContext.java?rev=1866280&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestContext.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestContext.java Mon Sep 2 13:56:03 2019
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav;
+
+/**
+ * Interface providing the minimum WebDAV request information associated with the current thread of execution.
+ */
+public interface WebdavRequestContext {
+
+ /**
+ * Return the current {@link WebdavRequest} instance associated with the current thread of execution.
+ * @return the current {@link WebdavRequest} instance associated with the current thread of execution
+ */
+ public WebdavRequest getRequest();
+
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/WebdavRequestContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/package-info.java Mon Sep 2 13:56:03 2019
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@org.osgi.annotation.versioning.Version("1.2.0")
+@org.osgi.annotation.versioning.Version("1.3.0")
package org.apache.jackrabbit.webdav;
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AbstractSecurityReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AbstractSecurityReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AbstractSecurityReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AbstractSecurityReport.java Mon Sep 2 13:56:03 2019
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.webdav.DavR
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.MultiStatus;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
+import org.apache.jackrabbit.webdav.version.report.AbstractReport;
import org.apache.jackrabbit.webdav.version.report.Report;
import org.apache.jackrabbit.webdav.version.report.ReportInfo;
import org.w3c.dom.Document;
@@ -31,7 +32,7 @@ import org.w3c.dom.Element;
* <code>AbstractSecurityReport</code> covers basic validation and utilities
* common to the majority of the reports defined within RFC 3744.
*/
-public abstract class AbstractSecurityReport implements Report {
+public abstract class AbstractSecurityReport extends AbstractReport {
protected MultiStatusResponse[] responses;
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AclPrincipalReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AclPrincipalReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AclPrincipalReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/AclPrincipalReport.java Mon Sep 2 13:56:03 2019
@@ -81,7 +81,7 @@ public class AclPrincipalReport extends
Map<String, MultiStatusResponse> respMap = new HashMap<String, MultiStatusResponse>();
List<AclProperty.Ace> list = (List<AclProperty.Ace>) ((AclProperty)acl).getValue();
for (AclProperty.Ace ace : list) {
- String href = ace.getPrincipal().getHref();
+ String href = normalizeResourceHref(ace.getPrincipal().getHref());
if (href == null || respMap.containsKey(href)) {
// ignore non-href principals and principals that have been listed before
continue;
@@ -93,4 +93,4 @@ public class AclPrincipalReport extends
}
this.responses = respMap.values().toArray(new MultiStatusResponse[respMap.size()]);
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/SearchablePropertyReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/SearchablePropertyReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/SearchablePropertyReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/SearchablePropertyReport.java Mon Sep 2 13:56:03 2019
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.webdav.security.report;
+import java.util.HashSet;
+import java.util.Set;
+
import org.apache.jackrabbit.webdav.DavConstants;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
@@ -23,6 +26,7 @@ import org.apache.jackrabbit.webdav.DavS
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
import org.apache.jackrabbit.webdav.security.SecurityConstants;
+import org.apache.jackrabbit.webdav.version.report.AbstractReport;
import org.apache.jackrabbit.webdav.version.report.Report;
import org.apache.jackrabbit.webdav.version.report.ReportInfo;
import org.apache.jackrabbit.webdav.version.report.ReportType;
@@ -32,9 +36,6 @@ import org.apache.jackrabbit.webdav.xml.
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import java.util.HashSet;
-import java.util.Set;
-
/**
* <code>SearchablePropertyReport</code> identifies those properties that may be
* searched using the {@link PrincipalSearchReport DAV:principal-property-search REPORT}.
@@ -57,7 +58,7 @@ import java.util.Set;
* Note that a DAV:principal-search-property XML element is required for each
* property that may be searched with the DAV:principal-property-search REPORT.
*/
-public class SearchablePropertyReport implements Report {
+public class SearchablePropertyReport extends AbstractReport {
/**
* The report name
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/package-info.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/package-info.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/security/report/package-info.java Mon Sep 2 13:56:03 2019
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("1.1.0")
package org.apache.jackrabbit.webdav.security.report;
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/AbstractWebdavServlet.java Mon Sep 2 13:56:03 2019
@@ -273,7 +273,10 @@ abstract public class AbstractWebdavServ
int methodCode = DavMethods.getMethodCode(request.getMethod());
boolean noCache = DavMethods.isDeltaVMethod(webdavRequest) && !(DavMethods.DAV_VERSION_CONTROL == methodCode || DavMethods.DAV_REPORT == methodCode);
WebdavResponse webdavResponse = new WebdavResponseImpl(response, noCache);
+
try {
+ WebdavRequestContextHolder.setContext(new WebdavRequestContextImpl(webdavRequest));
+
// make sure there is a authenticated user
if (!getDavSessionProvider().attachSession(webdavRequest)) {
return;
@@ -313,6 +316,7 @@ abstract public class AbstractWebdavServ
webdavResponse.sendError(e);
}
} finally {
+ WebdavRequestContextHolder.clearContext();
getDavSessionProvider().releaseSession(webdavRequest);
}
}
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextHolder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextHolder.java?rev=1866280&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextHolder.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextHolder.java Mon Sep 2 13:56:03 2019
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.server;
+
+import org.apache.jackrabbit.webdav.WebdavRequestContext;
+
+/**
+ * Associates a {@link WebdavRequestContext} with the current execution thread.
+ */
+public final class WebdavRequestContextHolder {
+
+ private static ThreadLocal<WebdavRequestContext> tlWebdavRequestContext = new ThreadLocal<>();
+
+ private WebdavRequestContextHolder() {
+ }
+
+ /**
+ * Return the {@link WebdavRequestContext} with the current execution thread.
+ * @return the {@link WebdavRequestContext} with the current execution thread
+ */
+ public static WebdavRequestContext getContext() {
+ return tlWebdavRequestContext.get();
+ }
+
+ static void setContext(WebdavRequestContext context) {
+ tlWebdavRequestContext.set(context);
+ }
+
+ static void clearContext() {
+ tlWebdavRequestContext.remove();
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextHolder.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextImpl.java?rev=1866280&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextImpl.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextImpl.java Mon Sep 2 13:56:03 2019
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.server;
+
+import org.apache.jackrabbit.webdav.WebdavRequest;
+import org.apache.jackrabbit.webdav.WebdavRequestContext;
+
+class WebdavRequestContextImpl implements WebdavRequestContext {
+
+ private final WebdavRequest request;
+
+ WebdavRequestContextImpl(final WebdavRequest request) {
+ this.request = request;
+ }
+
+ @Override
+ public WebdavRequest getRequest() {
+ return request;
+ }
+
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/WebdavRequestContextImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/server/package-info.java Mon Sep 2 13:56:03 2019
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("1.1.0")
package org.apache.jackrabbit.webdav.server;
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/AbstractReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/AbstractReport.java?rev=1866280&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/AbstractReport.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/AbstractReport.java Mon Sep 2 13:56:03 2019
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.version.report;
+
+import org.apache.jackrabbit.webdav.WebdavRequest;
+import org.apache.jackrabbit.webdav.WebdavRequestContext;
+import org.apache.jackrabbit.webdav.server.WebdavRequestContextHolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract <code>Report</code>.
+ */
+public abstract class AbstractReport implements Report {
+
+ private static Logger log = LoggerFactory.getLogger(AbstractReport.class);
+
+ /**
+ * Normalize the resource {@code href}. For example, remove contextPath prefix if found.
+ * @param href resource href
+ * @return normalized resource {@code href}
+ */
+ protected String normalizeResourceHref(final String href) {
+ if (href == null) {
+ return href;
+ }
+
+ final WebdavRequestContext requestContext = WebdavRequestContextHolder.getContext();
+ final WebdavRequest request = (requestContext != null) ? requestContext.getRequest() : null;
+
+ if (request == null) {
+ log.error("WebdavRequest is unavailable in the current execution context.");
+ return href;
+ }
+
+ final String contextPath = request.getContextPath();
+
+ if (!contextPath.isEmpty() && href.startsWith(contextPath)) {
+ return href.substring(contextPath.length());
+ }
+
+ return href;
+ }
+
+}
\ No newline at end of file
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/AbstractReport.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/CompareBaselineReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/CompareBaselineReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/CompareBaselineReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/CompareBaselineReport.java Mon Sep 2 13:56:03 2019
@@ -16,30 +16,30 @@
*/
package org.apache.jackrabbit.webdav.version.report;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceIterator;
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
import org.apache.jackrabbit.webdav.version.BaselineResource;
-import org.apache.jackrabbit.webdav.version.VersionResource;
+import org.apache.jackrabbit.webdav.version.DeltaVConstants;
import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.w3c.dom.Element;
+import org.apache.jackrabbit.webdav.version.VersionResource;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
-
-import java.util.List;
-import java.util.ArrayList;
+import org.w3c.dom.Element;
/**
* <code>CompareBaselineReport</code>...
*/
-public class CompareBaselineReport implements Report {
+public class CompareBaselineReport extends AbstractReport {
private static Logger log = LoggerFactory.getLogger(CompareBaselineReport.class);
@@ -95,7 +95,7 @@ public class CompareBaselineReport imple
// make sure the DAV:href element inside the request body points to
// an baseline resource (precondition for this report).
- String compareHref = DomUtil.getText(info.getContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE));
+ String compareHref = normalizeResourceHref(DomUtil.getText(info.getContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE)));
DavResourceLocator locator = resource.getLocator();
DavResourceLocator compareLocator = locator.getFactory().createResourceLocator(locator.getPrefix(), compareHref);
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java Mon Sep 2 13:56:03 2019
@@ -16,6 +16,10 @@
*/
package org.apache.jackrabbit.webdav.version.report;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceIterator;
@@ -36,10 +40,6 @@ import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
/**
* <code>ExpandPropertyReport</code> encapsulates the DAV:expand-property report,
* that provides a mechanism for retrieving in one request the properties from
@@ -61,7 +61,7 @@ import java.util.List;
* @see DeltaVConstants#XML_EXPAND_PROPERTY
* @see DeltaVConstants#XML_PROPERTY
*/
-public class ExpandPropertyReport implements Report, DeltaVConstants {
+public class ExpandPropertyReport extends AbstractReport implements DeltaVConstants {
private static Logger log = LoggerFactory.getLogger(ExpandPropertyReport.class);
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LatestActivityVersionReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LatestActivityVersionReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LatestActivityVersionReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LatestActivityVersionReport.java Mon Sep 2 13:56:03 2019
@@ -16,30 +16,30 @@
*/
package org.apache.jackrabbit.webdav.version.report;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
+import java.util.List;
+
import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
import org.apache.jackrabbit.webdav.version.ActivityResource;
import org.apache.jackrabbit.webdav.version.DeltaVConstants;
+import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
import org.apache.jackrabbit.webdav.version.VersionResource;
-import org.w3c.dom.Element;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
-
-import java.util.List;
+import org.w3c.dom.Element;
/**
* <code>LatestActivityVersionReport</code> is applied to a version history to
* identify the latest version that is selected from that version history by a
* given activity.
*/
-public class LatestActivityVersionReport implements Report {
+public class LatestActivityVersionReport extends AbstractReport {
private static Logger log = LoggerFactory.getLogger(LatestActivityVersionReport.class);
@@ -91,7 +91,7 @@ public class LatestActivityVersionReport
// make sure the DAV:href element inside the request body points to
// an activity resource (precondition for this report).
- String activityHref = DomUtil.getText(info.getContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE));
+ String activityHref = normalizeResourceHref(DomUtil.getText(info.getContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE)));
DavResourceLocator vhLocator = resource.getLocator();
DavResourceLocator activityLocator = vhLocator.getFactory().createResourceLocator(vhLocator.getPrefix(), activityHref);
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java Mon Sep 2 13:56:03 2019
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.webdav.version.report;
+import java.util.HashSet;
+import java.util.Set;
+
import org.apache.jackrabbit.webdav.DavConstants;
import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
@@ -33,9 +36,6 @@ import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import java.util.HashSet;
-import java.util.Set;
-
/**
* <code>LocateByHistoryReport</code> encapsulates the DAV:locate-by-hisotry
* report, that may be used to locate a version-controlled resource for that
@@ -48,7 +48,7 @@ import java.util.Set;
* <!ELEMENT version-history-set (href+)>
* </pre>
*/
-public class LocateByHistoryReport implements Report, DeltaVConstants {
+public class LocateByHistoryReport extends AbstractReport implements DeltaVConstants {
private static Logger log = LoggerFactory.getLogger(LocateByHistoryReport.class);
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java Mon Sep 2 13:56:03 2019
@@ -36,7 +36,7 @@ import org.w3c.dom.Element;
* history of a version. The DAV:version-tree report must be supported by all
* version resources and all version-controlled resources.
*/
-public class VersionTreeReport implements Report, DeltaVConstants {
+public class VersionTreeReport extends AbstractReport implements DeltaVConstants {
private static Logger log = LoggerFactory.getLogger(VersionTreeReport.class);
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/package-info.java?rev=1866280&r1=1866279&r2=1866280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/package-info.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/package-info.java Mon Sep 2 13:56:03 2019
@@ -14,5 +14,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("1.1.0")
package org.apache.jackrabbit.webdav.version.report;