Настройка Symlinks для одного каталога в Tomcat
У меня есть каталог, в который процесс загружает несколько файлов .pdf
. Этот процесс не поддается контролю.
Мне нужно сделать эти файлы доступными через веб-сайт с помощью Tomcat.
У меня есть каталог /var/lib/tomcat5/webapps/test1
, доступный в Интернете, и я могу видеть файлы в нем с помощью браузера.
Итак, я создал символическую ссылку, указывающую на каталог с файлами .pdf
:
/var/lib/tomcat5/webapps/test1/files/
, но я не вижу ничего в этом каталоге.
Как включить символические ссылки в каталоге test1
? Я не хочу включать символические ссылки везде, так что каталог с файлами .pdf
доступен в Интернете.
Ответы
Ответ 1
Есть несколько проблем с решением создания 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>
в server.xml
.
Наконец, вместо файла myapp/META-INF/context.xml
я рекомендую использовать файл conf/Catalina/localhost/myapp.xml
. Этот метод означает, что вы можете сохранить содержимое своего META-INF
чистым, что является мужеством вашего webapp - я не люблю рисковать в мучениях моего webapp.: -)
Ответ 2
Создайте файл 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/
Ответ 3
Да, я знаю, это старый вопрос, но я нашел новое решение, используя mount с опцией -bind вместо символической ссылки, а tomcat не нуждается в переконфигурации:
cd/var/lib/tomcat5/webapps/test1/
Файлы mkdir
mount --bind/path/to/actual/upload/directory/files files
Ответ 4
Я сделал это по-другому.
Я редактирую этот другой файл конфигурации: apache-tomcat-7.0.33/conf/ server.xml
В теге Host я добавил:
<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>
Итак, вы можете получить доступ через: http://localhost/data
Ответ 5
Есть 4 места, где Context может жить.
- tomcatdir/конф/server.xml
- tomcatdir/CONF/context.xml
- tomcatdir/конф/Каталина/локальный/appname.xml
- tomcatdir/WebApps/имя_приложения/META-INF/context.xml
В случае использования атрибута allowlinking tomcat 8 следует указывать не в Контексте, а в теге 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. Поэтому я удалил тег ресурсов из server.xml и оставил в нем только tomcatdir/conf/context.xml с атрибутом allowLinking = "true".