J'ai un répertoire dans lequel un processus télécharge des fichiers .pdf
. Ce processus est hors de mon contrôle.
Je dois rendre ces fichiers disponibles sur le site Web à l'aide de Tomcat.
J'ai un répertoire /var/lib/Tomcat5/webapps/test1
disponible sur le Web et je peux voir les fichiers qu'il contient avec un navigateur.
J'ai donc créé un lien symbolique pointant vers le répertoire avec les fichiers .pdf
: /var/lib/Tomcat5/webapps/test1/files/
, mais je ne vois rien dans ce répertoire.
Comment puis-je activer les liens symboliques dans le répertoire test1
uniquement? Je ne veux pas activer les liens symboliques partout, juste pour que le répertoire avec les fichiers .pdf
soit disponible sur le Web.
La solution consistant à créer un META-INF/context.xml
contenant <Context path="/myapp" allowLinking="true">
pose quelques problèmes.
Le plus gros problème est que, si un conf/context.xml
existe, la allowLinking
du <Context>
prend alors la précédence sur un <Context>
dans un META-INF/context.xml
. Et si le dans conf/context.xml
ne définit pas explicitement allowLinking
, cela revient à dire allowLinking="false"
. (voir ma réponse à une question de préséance du contexte)
Pour être sûr que votre application autorise la liaison, vous devez dire <Context override="true" allowLinking="true" ...>
.
Un autre problème est que le path="/myapp"
est ignoré dans un META-INF/context.xml
. Pour éviter toute confusion, il est préférable de laisser tomber. La seule fois où path
dans un <Context>
a un effet est dans le server.xml
et les documents officiels Tomcat déconseillent de mettre <Context>
s dans un server.xml
.
Enfin, au lieu d’un fichier myapp/META-INF/context.xml
, je vous recommande d’utiliser un fichier conf/Catalina/localhost/myapp.xml
. Cette technique signifie que vous pouvez garder le contenu de votre META-INF
propre, ce qui est le courage de votre application Web - je n'aime pas risquer de perdre son temps dans les entrailles de mon application Web. :-)
Créez un fichier context.xml dans un répertoire META-INF
de votre application Web contenant:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" allowLinking="true">
</Context>
plus ici: http://www.isocra.com/2008/01/following-symbolic-links-in-Tomcat/
Oui, je sais que c'est une vieille question, mais j'ai trouvé une nouvelle solution, en utilisant mount avec l'option --bind au lieu d'un lien symbolique, et Tomcat n'a pas besoin de reconfiguration:
cd/var/lib/Tomcat5/webapps/test1 /
fichiers mkdir
mount --bind/path/to/actual/upload/directory/files fichiers
Cela fonctionne différemment dans Tomcat 8+
http://Tomcat.Apache.org/migration-8.html
<Resources allowLinking="true" />
Il y a 4 endroits où le contexte peut vivre.
Dans le cas de Tomcat 8, l'attribut allowlinking doit être spécifié non dans le contexte, mais dans la balise Resources. Mon tomcatdir/conf/context.xml ressemble à ceci
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>
Cette solution fonctionne bien pour moi maintenant. Mais je veux aussi partager l’erreur que j’avais commise avant de proposer cette solution.
J'avais défini les ressources à la fois dans tomcatdir/conf/server.xml et dans tomcatdir/conf/context.xml. Et allowLinking = "true" a été défini uniquement dans tomcatdir/conf/server.xml.
Ce que j’ai trouvé, c’est que si vous ne spécifiez pas allowLinking, cela revient à lui attribuer la valeur false. J'ai donc supprimé la balise Resources de server.xml et ne l'ai laissée que par tomcatdir/conf/context.xml avec l'attribut allowLinking = "true" qu'elle contient.
Je l'ai fait de cette autre manière. J'édite cet autre fichier de configuration: Apache-Tomcat-7.0.33/conf / server.xml Dans Host tag que j'ai ajouté:
<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>
Vous pouvez donc accéder via: http: // localhost/data
L’ajout de la ligne suivante dans le fichier conf/context.xml active les liens symboliques pour moi sur Apache Tomcat 8.5+.
< Ressources allowLinking = "true" cachingAllowed = "true" cacheMaxSize = "100000" >