Configurar Symlinks para o diretório único no Tomcat
-
10-07-2019 - |
Pergunta
Eu tenho um diretório para o qual um processo carrega alguns arquivos .pdf
. Este processo está fora do meu controle.
Eu preciso fazer esses arquivos disponíveis através do site usando Tomcat.
Eu tenho um /var/lib/tomcat5/webapps/test1
diretório disponível para a web e eu posso ver os arquivos nele com um navegador.
Então, eu criei um link simbólico apontando para o diretório com os arquivos .pdf
:
/var/lib/tomcat5/webapps/test1/files/
, mas eu não posso ver nada nesse diretório.
Como posso habilitar links simbólicos em apenas o diretório test1
? Eu não quero para habilitar links simbólicos em todos os lugares, apenas para que diretório com arquivos .pdf
está disponível para a web.
Solução
Existem alguns problemas com a solução de criar um META-INF/context.xml
que contém <Context path="/myapp" allowLinking="true">
O maior problema é que, se existe um conf/context.xml
, o allowLinking
na <Context>
não leva precedência sobre a <Context>
em um META-INF/context.xml
. E se o no conf/context.xml
não define explicitamente allowLinking
, isso é o mesmo que dizer allowLinking="false"
. (Veja minha resposta a uma pergunta contexto precedência)
Para ter certeza de que seu aplicativo permite ligar, você tem a dizer <Context override="true" allowLinking="true" ...>
.
Outra questão é que o path="/myapp"
é ignorado em um META-INF/context.xml
. Para evitar confusão, é melhor deixá-lo fora. A única path
vez em um <Context>
tem qualquer efeito está no server.xml
, eo docs oficiais Tomcat recomendam contra colocando <Context>
s em um server.xml
.
Finalmente, em vez de um arquivo myapp/META-INF/context.xml
, eu recomendo usar um arquivo conf/Catalina/localhost/myapp.xml
. Isto significa técnica que você pode manter o conteúdo de seu limpo META-INF
, que é a coragem do seu webapp - Eu não gosto de risco mucking nas vísceras de meu webapp. : -)
Outras dicas
Crie um arquivo context.xml em um diretório META-INF
em seu aplicativo web que contém:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" allowLinking="true">
</Context>
mais aqui: http: //www.isocra. com / 2008/01 / following-simbólico-links-em-tomcat /
Sim, eu sei que é uma questão antiga, mas eu achei uma nova solução, utilizando o suporte com a opção --bind em vez de uma ligação simbólica, e tomcat não precisa de qualquer reconfiguração:
cd / var / lib / tomcat5 / webapps / test1 /
arquivos mkdir
montar --bind / path / to / real / upload / diretório / arquivos de arquivos
Isso funciona diferente no Tomcat 8 +
http://tomcat.apache.org/migration-8.html
<Resources allowLinking="true" />
Existem 4 lugares onde Contexto pode viver.
- tomcatdir / conf / server.xml
- tomcatdir / conf / context.xml
- tomcatdir / conf / Catalina / localhost / appname.xml
- tomcatdir / webapps / appname / META-INF / context.xml
Em caso de tomcat 8 atributo allowlinking deve ser não especificado no Contexto mas na tag Recursos. Meu tomcatdir / conf / context.xml olhares como este
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>
Esta solução funciona bem para mim agora. Mas eu quero compartilhar também o erro que eu tinha feito antes de chegar a esta solução.
Eu tinha definido Recursos tanto em tomcatdir / conf / server.xml e em tomcatdir / conf / context.xml. E allowLinking = "true" foi criado apenas em tomcatdir / conf / server.xml.
O que descobri foi que, se você não especificar allowLinking é igual a defini-la como falsa. Então eu removi tag Recursos de server.xml e deixou apenas tomcatdir / conf / context.xml com o atributo "true" nele allowLinking =.
Eu fiz isso nesta outra maneira. Eu editar este outro arquivo de configuração: apache-tomcat-7.0.33 / conf / server.xml Em tag anfitrião acrescentei:
<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>
Assim, você pode acesso via: http: // localhost / dados
Adicionando seguinte linha em conf / context.xml permite softlinks para mim no Apache Tomcat 8.5 +
<< strong> Recursos allowLinking = "true" cachingAllowed = "true" cacheMaxSize = "100000" >