This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/11.0.x by this push:
     new a4259bcaf2 Add option to serve resources from subpath only with WebDAV 
Servlet
a4259bcaf2 is described below

commit a4259bcaf2a6461c358e5b77746482aefeba1178
Author: Michael Osipov <micha...@apache.org>
AuthorDate: Wed Nov 13 11:48:00 2024 +0100

    Add option to serve resources from subpath only with WebDAV Servlet
---
 .../apache/catalina/servlets/WebdavServlet.java    | 23 ++++++++++++++++++++--
 webapps/docs/changelog.xml                         |  8 ++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java 
b/java/org/apache/catalina/servlets/WebdavServlet.java
index 0766e91b84..8de9008314 100644
--- a/java/org/apache/catalina/servlets/WebdavServlet.java
+++ b/java/org/apache/catalina/servlets/WebdavServlet.java
@@ -74,11 +74,12 @@ import org.xml.sax.SAXException;
 /**
  * Servlet which adds support for <a 
href="https://tools.ietf.org/html/rfc4918";>WebDAV</a>
  * <a href="https://tools.ietf.org/html/rfc4918#section-18";>level 3</a>. All 
the basic HTTP requests are handled by the
- * DefaultServlet. The WebDAVServlet must not be used as the default servlet 
(ie mapped to '/') as it will not work in
+ * DefaultServlet. The WebdavServlet must not be used as the default servlet 
(ie mapped to '/') as it will not work in
  * this configuration.
  * <p>
  * Mapping a subpath (e.g. <code>/webdav/*</code> to this servlet has the 
effect of re-mounting the entire web
- * application under that sub-path, with WebDAV access to all the resources. 
The <code>WEB-INF</code> and
+ * application under that sub-path, with WebDAV access to all the resources. 
To restore the DefaultServlet
+ * behavior set <code>serveSubpathOnly</code> to <code>true</code>. The 
<code>WEB-INF</code> and
  * <code>META-INF</code> directories are protected in this re-mounted resource 
tree.
  * <p>
  * To enable WebDAV for a context add the following to web.xml:
@@ -247,6 +248,12 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
      */
     private boolean strictIfProcessing = true;
 
+    /**
+     * Serve resources from the mounted subpath only, restoring the behavior of
+     * {@code DefaultServlet}.
+     */
+    private boolean serveSubpathOnly = false;
+
 
     /**
      * Property store used for storage of dead properties.
@@ -285,6 +292,10 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
             strictIfProcessing = 
Boolean.parseBoolean(getServletConfig().getInitParameter("strictIfProcessing"));
         }
 
+        if (getServletConfig().getInitParameter("serveSubpathOnly") != null) {
+            serveSubpathOnly = 
Boolean.parseBoolean(getServletConfig().getInitParameter("serveSubpathOnly"));
+        }
+
         String propertyStore = 
getServletConfig().getInitParameter("propertyStore");
         if (propertyStore != null) {
             try {
@@ -686,6 +697,10 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
      */
     @Override
     protected String getRelativePath(HttpServletRequest request, boolean 
allowEmptyPath) {
+        if (serveSubpathOnly) {
+            return super.getRelativePath(request, allowEmptyPath);
+        }
+
         String pathInfo;
 
         if (request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI) != 
null) {
@@ -712,6 +727,10 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
 
     @Override
     protected String getPathPrefix(final HttpServletRequest request) {
+        if (serveSubpathOnly) {
+            return super.getPathPrefix(request);
+        }
+
         // Repeat the servlet path (e.g. /webdav/) in the listing path
         String contextPath = request.getContextPath();
         if (request.getServletPath() != null) {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 3258e25c76..1bc004509c 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -105,6 +105,14 @@
   issues do not "pop up" wrt. others).
 -->
 <section name="Tomcat 11.0.2 (markt)" rtext="in development">
+  <subsection name="Catalina">
+    <changelog>
+      <add>
+        Add option to serve resources from subpath only with WebDAV Servlet 
like
+        with DefaultServlet. (michaelo)
+      </add>
+    </changelog>
+  </subsection>
   <subsection name="Coyote">
     <changelog>
       <fix>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to