On 2024/10/02 14:46:06 Christopher Schultz wrote:
> Michael,
> 
> On 10/1/24 12:14, Michael Osipov wrote:
> > On 2024/10/01 15:20:53 Rémy Maucherat wrote:
> >> On Tue, Oct 1, 2024 at 4:53 PM Michael Osipov <micha...@apache.org> wrote:
> >>>
> >>> Folks,
> >>>
> >>> I'd like to put some effort into the DefaultServlet and the WebDAV servlet
> >>> to align them more with mod_autoindex and add some minor improvements if I
> >>> can cover my usecases here at work.
> >>>
> >>> Currently, I use mod_dav which I want to replace with the WebDAV servlet
> >>> because I don't have the authz components in HTTPd like I have in Tomcat
> >>> (it is rather a pain since I need to sync groups into a local file).
> >>>
> >>> The config in HTTPd is straight forward:
> >>>> <LocationMatch "^/(backend-dev|content-dev|prod)/dav(/|$)(.*)">
> >>>>      ProxyPassMatch "!"
> >>>> </LocationMatch>
> >>>>
> >>>> AliasMatch "^/(backend-dev|content-dev|prod)/dav(/|$)(.*)" 
> >>>> "/var/foo/$1$2$3"
> >>>> <DirectoryMatch "^/var/foo/(backend-dev|content-dev|prod)(/|$)(.*)">
> >>>>      Dav On
> >>>>      AuthType GSSAPI
> >>>>      AuthName "Foo WebDAV Repository"
> >>>>      AuthzSendForbiddenOnFailure On
> >>>>      Options Indexes
> >>>>      IndexOptions FancyIndexing FoldersFirst Charset=UTF-8 NameWidth=* 
> >>>> SuppressDescription
> >>>>      <Limit GET HEAD OPTIONS PROPFIND>
> >>>>          AuthGroupFile /var/foo/db/apache-groups.txt
> >>>>          Require group foo-maintainers bar-maintainers baz-maintainers
> >>>>      </Limit>
> >>>>      AddDefaultCharset utf-8
> >>>>      AddType text/plain .log .tex
> >>>> </DirectoryMatch>
> >>>
> >>> /(backend-dev|content-dev|prod) are proxied to three Tomcat instances, the
> >>> config above would be replaced with subcontexts at 
> >>> /(backend-dev|content-dev|prod)#dav
> >>> (solely for the DAV purpose) where the web.xml contains:
> >>>> <servlet>
> >>>>        <servlet-name>webdav</servlet-name>
> >>>>        
> >>>> <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
> >>>>        <init-param>
> >>>>                <param-name>listings</param-name>
> >>>>                <param-value>true</param-value>
> >>>>        </init-param>
> >>>>        <init-param>
> >>>>                <param-name>showServerInfo</param-name>
> >>>>                <param-value>false</param-value>
> >>>>        </init-param>
> >>>>        <init-param>
> >>>>                <param-name>sortListings</param-name>
> >>>>                <param-value>true</param-value>
> >>>>        </init-param>
> >>>>        <init-param>
> >>>>                <param-name>sortDirectoriesFirst</param-name>
> >>>>                <param-value>true</param-value>
> >>>>        </init-param>
> >>>>        <init-param>
> >>>>                <param-name>fileEncoding</param-name>
> >>>>                <param-value>UTF-8</param-value>
> >>>>        </init-param>
> >>>>        <load-on-startup>1</load-on-startup>
> >>>> </servlet>
> >>>>
> >>>> <servlet-mapping>
> >>>>        <servlet-name>webdav</servlet-name>
> >>>>        <url-pattern>/*</url-pattern>
> >>>> </servlet-mapping>
> >>>>
> >>>>        <security-constraint>
> >>>>                <web-resource-collection>
> >>>>                        <web-resource-name>WebDAV</web-resource-name>
> >>>>                        <url-pattern>/*</url-pattern>
> >>>>                </web-resource-collection>
> >>>>                <auth-constraint>
> >>>>                        <role-name>Foo Maintainer</role-name>
> >>>>                        <role-name>Bar Maintainer</role-name>
> >>>>                        <role-name>Baz Maintainer</role-name>
> >>>>                </auth-constraint>
> >>>>        </security-constraint>
> >>>
> >>> and the context.xml (for backend-dev):
> >>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>> <Context>
> >>>>        <Listener 
> >>>> className="org.apache.catalina.core.PropertiesRoleMappingListener" />
> >>>>
> >>>>        <Valve 
> >>>> className="net.sf.michaelo.tomcat.authenticator.SpnegoAuthenticator"
> >>>>                loginEntryName="tomcat-accept" 
> >>>> sendAuthInfoResponseHeaders="true" />
> >>>>
> >>>>        <Realm 
> >>>> className="net.sf.michaelo.tomcat.realm.PacDataActiveDirectoryRealm"
> >>>>                loginEntryName="tomcat-accept" />
> >>>>
> >>>>        <Resources>
> >>>>                <PostResources base="/var/foo/backend-dev"
> >>>>                        
> >>>> className="org.apache.catalina.webresources.DirResourceSet"
> >>>>                        webAppMount="/" />
> >>>>        </Resources>
> >>>> </Context>
> >>>
> >>> It just works from the browser, CarotDAV, the Windows Explorer, and 
> >>> py-webdavclient3.
> >>>
> >>> Now my question/concern is the Javadoc of the servlet [1] says:
> >>>> The WebDAVServlet must not be used as the default servlet (ie mapped to 
> >>>> '/') as it will not work in this configuration.
> >>>
> >>> Well, it works, doesn't it? And the sample below maps to root as well:
> >>>>    <servlet-mapping>
> >>>>      <servlet-name>webdav</servlet-name>
> >>>>      <url-pattern>/*</url-pattern>
> >>>>    </servlet-mapping>
> >>>
> >>> So what is it now, can I safely use the servlet with this setup?
> >>> There is nothing else in this WAR file except context.xml, web.xml and
> >>> a properties file.
> >>
> >> /* mapping is very different from /. / is the default servlet. /* is
> >> not and has a priority over it.
> >> The javadoc which you linked to has a mapping example of the WebDAV
> >> servlet using /*, which is 100% ok.
> > 
> > Ahhh, you are right. It is a subtile difference. I want to evalute yet 
> > another option depicted in the DefaultServlet Javadoc, but in any case it 
> > looks good so far.
> 
> IMHO It's worth pointing out in this same place in the documentation 
> that "/ is bad but /* is okay". When I read your question I thought "/ 
> != /*" but not every user would understand the distinction.

True, maybe we should add this excellent reference to the docs: 
https://stackoverflow.com/a/4140659/696632

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

Reply via email to