(добавить в web.xml):
<servlet>
  <servlet-name>webdav</servlet-name>
  <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
  <init-param>
    <param-name>debug</param-name>
    <param-value>0</param-value>
  </init-param>
  <init-param>
    <param-name>listings</param-name>
    <param-value>true</param-value>
  </init-param>
  <!-- The following for read-write access -->
  <init-param>
    <param-name>readonly</param-name>
    <param-value>false</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>webdav</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>При этом каталог хранения файлов будет каталогом размещения web приложения, поэтому данное приложение не стоит совмещать с каким либо другим (без надобности), дабы изолировать хранилище файлов.
Подобная конфигурация позволяет как читать кому угодно, так и писать, переименовывать, удалять, словом, совершать все WebDAV операции.
Необходимо ограничить доступ так, чтобы читать мог кто угодно, а писать только авторизованные пользователи.
Добавляем роль uploader в Tomcat (файл tomcat-users.xml или через менеджер пользователей Tomcat'а):
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="uploader"/>
  <user username="uploader" password="12345" roles="uploader"/>
</tomcat-users>Далее, существует два подхода - первый ограничить http операции к web ресурсу (добавив в web.xml):
 <security-constraint>
    <web-resource-collection>
      <web-resource-name>Upload</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>PROPFIND</http-method>
      <http-method>PROPPATCH</http-method>
      <http-method>COPY</http-method>
      <http-method>MOVE</http-method>
      <http-method>DELETE</http-method>
      <http-method>PUT</http-method>
      <http-method>LOCK</http-method>
      <http-method>UNLOCK</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>uploader</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Upload supported realm</realm-name>
  </login-config>
  <security-role>
    <description>An example role defined in "conf/tomcat-users.xml"</description>
    <role-name>uploader</role-name>
  </security-role>Либо сделать два сервлета - один исключительно на чтение, другой на полный доступ, но под авторизацией и с различными servlet-mapping:
<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>readonly</param-name>
      <param-value>true</param-value>
    </init-param>
  </servlet>
  <servlet>
    <servlet-name>webdavUpload</servlet-name>
    <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>listings</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>readonly</param-name>
      <param-value>false</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>webdav</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>webdavUpload</servlet-name>
    <url-pattern>/upload/*</url-pattern>
  </servlet-mapping>
 <security-constraint>
    <web-resource-collection>
      <web-resource-name>Upload</web-resource-name>
      <url-pattern>/upload/*</url-pattern>
 </web-resource-collection>
    <auth-constraint>
      <role-name>uploader</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Upload supported realm</realm-name>
  </login-config>
  <security-role>
    <description>An example role defined in "conf/tomcat-users.xml"</description>
    <role-name>uploader</role-name>
  </security-role> 
 
Комментариев нет:
Отправить комментарий