Настройте символические ссылки для одного каталога в Tomcat - PullRequest
26 голосов
/ 24 ноября 2008

У меня есть каталог, в который процесс загружает некоторые .pdf файлы. Этот процесс вне моего контроля.

Мне нужно сделать эти файлы доступными через веб-сайт, используя Tomcat.

У меня есть каталог /var/lib/tomcat5/webapps/test1, доступный в Интернете, и я могу просматривать файлы в нем с помощью браузера.

Итак, я создал символическую ссылку, указывающую на каталог с файлами .pdf: /var/lib/tomcat5/webapps/test1/files/, но я ничего не вижу в этом каталоге.

Как включить символические ссылки только в каталоге test1? Я не хочу включать символические ссылки везде, просто чтобы в Интернете был доступен каталог с файлами .pdf.

Ответы [ 7 ]

49 голосов
/ 27 ноября 2008

Существует несколько проблем с решением создания META-INF/context.xml, содержащего <Context path="/myapp" allowLinking="true">

Самая большая проблема заключается в том, что если существует conf/context.xml, то allowLinking в <Context> там имеет приоритет над a <Context> в META-INF/context.xml. И если в conf/context.xml явно не определено allowLinking, это то же самое, что сказать allowLinking="false". (см. мой ответ на вопрос о приоритетах контекста)

Чтобы убедиться, что ваше приложение разрешает связывание, вы должны сказать <Context override="true" allowLinking="true" ...>.

Другая проблема заключается в том, что path="/myapp" игнорируется в META-INF/context.xml. Чтобы избежать путаницы, лучше не указывать. Единственный раз, когда path в <Context> оказывает какое-либо влияние, - это server.xml, и официальные документы Tomcat рекомендуют против ставить <Context> s в server.xml.

Наконец, вместо файла myapp/META-INF/context.xml я рекомендую использовать файл conf/Catalina/localhost/myapp.xml. Этот метод означает, что вы можете содержать содержимое вашего META-INF в чистоте, что является внутренним содержимым вашего веб-приложения - я не люблю рисковать, пытаясь разобраться в внутренностях моего веб-приложения. : -)

16 голосов
/ 24 ноября 2008

Создайте файл context.xml в каталоге META-INF в своем веб-приложении, содержащем:

<?xml version="1.0" encoding="UTF-8"?>

<Context path="/myapp" allowLinking="true">

</Context>

больше здесь: http://www.isocra.com/2008/01/following-symbolic-links-in-tomcat/

6 голосов
/ 08 июня 2015

Да, я знаю, что это старый вопрос, но я нашел новое решение, используя mount с параметром --bind вместо символической ссылки, и tomcat не требует перенастройки:

cd / var / lib / tomcat5 / webapps / test1 /

MKDIR файлы

mount --bind / path / to / actual / upload / directory / files files

4 голосов
/ 24 февраля 2018

Это работает по-другому в Tomcat 8 +

http://tomcat.apache.org/migration-8.html

<Resources allowLinking="true" />
3 голосов
/ 28 апреля 2017

Есть 4 места, где может жить Context.

  1. tomcatdir / конф / server.xml
  2. tomcatdir / CONF / context.xml
  3. tomcatdir / конф / Каталина / локальный / appname.xml
  4. tomcatdir / WebApps / имя_приложения / META-INF / context.xml

В случае tomcat 8 атрибут allowlinking должен быть указан не в Context, а в теге Resources. Мой tomcatdir / conf / context.xml выглядит так

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 <Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>

Это решение отлично работает для меня сейчас. Но я хочу поделиться также ошибкой, которую я сделал, прежде чем прийти к этому решению.

Я определил ресурсы как в tomcatdir / conf / server.xml, так и в tomcatdir / conf / context.xml. И allowLinking = "true" был установлен только в tomcatdir / conf / server.xml.

Я обнаружил, что если вы не укажете allowLinking, это будет равно значению false. Поэтому я удалил тег Resources из server.xml и оставил только tomcatdir / conf / context.xml с атрибутом allowLinking = "true".

1 голос
/ 21 мая 2015

Я сделал это другим способом. Я редактирую этот другой файл конфигурации: apache-tomcat-7.0.33 / conf / server.xml В тег Host я добавил:

<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>

Таким образом, вы можете получить доступ через: http://localhost/data

0 голосов
/ 27 ноября 2018

Добавление следующей строки в conf / context.xml позволяет мне использовать программные ссылки на apache tomcat 8.5 +

<<strong> Ресурсы allowLinking = "true" cachingAllowed = "true" cacheMaxSize = "100000" >

...