Configurer les liens symboliques pour un répertoire unique dans Tomcat

j'ai un répertoire dans lequel un processus envoie des fichiers .pdf . Ce processus est hors de mon contrôle.

je dois rendre ces fichiers disponibles sur le site Web en utilisant Tomcat.

j'ai un répertoire /var/lib/tomcat5/webapps/test1 , disponible sur le web et je peux voir les fichiers à l'aide d'un navigateur.

donc, j'ai créé un lien symbolique pointant vers le répertoire avec les fichiers .pdf : /var/lib/tomcat5/webapps/test1/files/ , mais je ne vois pas rien dans ce répertoire.

Comment puis-je activer les liens symboliques uniquement dans le répertoire test1 ? Je ne veux pas activer les liens symboliques partout, juste pour que le répertoire avec les fichiers .pdf soit disponible sur le web.

26
demandé sur Jawa 2008-11-24 22:05:38

6 réponses

il y a quelques problèmes avec la solution de créer un META-INF/context.xml qui contient <Context path="/myapp" allowLinking="true">

le plus grand problème est que si un conf/context.xml existe, le allowLinking dans le <Context> il prend priorité sur a <Context> dans un META-INF/context.xml . Et si le dans le conf/context.xml ne définit pas explicitement allowLinking , c'est la même chose que dire allowLinking="false" . (voir ma réponse à une contexte question de priorité)

pour être sûr que votre application permet le lien, vous devez dire <Context override="true" allowLinking="true" ...> .

un Autre problème est que le path="/myapp" est ignoré dans une META-INF/context.xml . Pour éviter la confusion, il est préférable de laisser tomber. La seule fois path dans un <Context> a un effet est dans le server.xml , et le Tomcat docs officiels recommandent contre mettant <Context> s dans un server.xml .

enfin, au lieu d'un fichier myapp/META-INF/context.xml , je recommande l'utilisation d'un fichier conf/Catalina/localhost/myapp.xml . Cette technique signifie que vous pouvez garder le contenu de votre META-INF propre, qui est les tripes de votre webapp -- Je n'aime pas risquer de mucking dans les tripes de mon webapp. :- )

49
répondu netjeff 2017-05-23 12:34:15

créer un contexte.fichier xml dans un répertoire META-INF dans 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 /

16
répondu Loki 2012-03-05 21:06:22

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 /

mkdir fichiers

mount --bind /chemin/vers/réel/upload/répertoire/fichiers fichiers

6
répondu Mick 2015-06-08 14:50:58

cela fonctionne différemment dans Tomcat 8+

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

<Resources allowLinking="true" />
4
répondu weberjn 2018-02-24 12:15:03

il y a 4 endroits où le contexte peut vivre.

  1. tomcatdir/conf/server.xml
  2. tomcatdir/conf / context.xml
  3. tomcatdir/conf/Catalina/localhost / appname.xml
  4. tomcatdir/webapps/appname/META-INF / context.xml

dans le cas de l'attribut tomcat 8 allowlinking doit être spécifié non pas dans le contexte mais dans L'étiquette Resources. Mon tomcatdir/conf/contexte.xml ressemble comme 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 très bien pour moi maintenant. Mais je veux aussi partager l'erreur que j'avais faite avant d'arriver à cette solution.

j'avais défini les ressources à la fois dans tomcatdir/conf/server.xml et dans tomcatdir/conf/contexte.XML. Et allowLinking= "true" n'a été défini que dans tomcatdir/conf/server.XML.

ce que j'ai trouvé était que si vous ne spécifiez pas allowLinking, c'est égal à la définir à false. J'ai donc enlevé Étiquette de ressources du serveur.xml et laissé seulement tomcatdir/conf/contexte.xml avec l'attribut allowLinking="true".

2
répondu Nare 2017-04-28 06:30:15

je l'ai fait de cette façon. Je modifie cet autre fichier de configuration: apache-tomcat-7.0.33/conf/ serveur .xml Dans Hôte tag j'ai ajouté:

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

ainsi, vous pouvez accéder via: http://localhost/data

1
répondu Brais Perez 2015-05-21 08:00:09