it-swarm.com.de

Konfigurieren Sie Symlinks für ein einzelnes Verzeichnis in Tomcat

Ich habe ein Verzeichnis, in das ein Prozess einige .pdf-Dateien hochlädt. Dieser Prozess ist außerhalb meiner Kontrolle.

Ich muss diese Dateien mit Tomcat auf der Website verfügbar machen.

Ich habe ein Verzeichnis /var/lib/Tomcat5/webapps/test1 für das Web zur Verfügung und ich kann die Dateien darin mit einem Browser sehen.

Also habe ich einen symbolischen Link erstellt, der auf das Verzeichnis mit den .pdf-Dateien verweist: /var/lib/Tomcat5/webapps/test1/files/, aber ich kann nichts in diesem Verzeichnis sehen.

Wie kann ich Symlinks nur im Verzeichnis test1 aktivieren? Ich möchte Symlinks nicht überall aktivieren, nur damit das Verzeichnis mit .pdf-Dateien für das Web verfügbar ist.

26
jeph perro

Es gibt einige Probleme mit der Lösung, einen META-INF/context.xml zu erstellen, der <Context path="/myapp" allowLinking="true"> enthält.

Das größte Problem ist, dass wenn ein conf/context.xml vorhanden ist, die allowLinking im <Context> dort Vorrang vor a <Context> in einem META-INF/context.xml hat. Und wenn in conf/context.xmlallowLinking nicht explizit definiert wird, ist dies dasselbe wie wenn Sie allowLinking="false" sagen. (siehe meine Antwort zu einer kontextabhängigen Frage)

Um sicher zu sein, dass Ihre App das Verknüpfen zulässt, müssen Sie <Context override="true" allowLinking="true" ...> sagen.

Ein weiteres Problem ist, dass der path="/myapp" in einem META-INF/context.xml ignoriert wird. Um Verwirrung zu vermeiden, lassen Sie es am besten aus. Der einzige Zeitpunkt, zu dem path in einem <Context> Auswirkungen hat, ist der server.xml, und die offizielle Tomcat-Dokumente empfehlen dagegen setzen <Context>s in einen server.xml.

Schließlich empfehle ich anstelle einer myapp/META-INF/context.xml-Datei die Verwendung einer conf/Catalina/localhost/myapp.xml-Datei. Diese Technik bedeutet, dass Sie den Inhalt Ihres META-INF sauber halten können. Dies ist der Mut Ihrer Webapp - ich mag es nicht, mich im Innern meiner Webapp herumzubewegen. :-)

49
netjeff

Erstellen Sie eine context.xml-Datei in einem META-INF-Verzeichnis Ihrer Web-App, die Folgendes enthält:

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

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

</Context>

mehr hier: http://www.isocra.com/2008/01/following-symbolic-links-in-Tomcat/

16
Loki

Ja, ich weiß, es ist eine alte Frage, aber ich habe eine neue Lösung gefunden, bei der mount mit der Option --bind anstelle eines Symlinks verwendet wurde, und Tomcat muss nicht neu konfiguriert werden:

cd/var/lib/Tomcat5/webapps/test1 /

mkdir-Dateien

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

6
Mick

Dies funktioniert in Tomcat 8+ anders

http://Tomcat.Apache.org/migration-8.html

<Resources allowLinking="true" />
4
weberjn

Es gibt 4 Orte, an denen Context leben kann.

  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

Im Falle von Tomcat 8 sollte das allowlinking-Attribut nicht im Kontext, sondern im Ressourcen-Tag angegeben werden. Mein tomcatdir/conf/context.xml sieht so aus 

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

Diese Lösung funktioniert jetzt gut für mich. Aber ich möchte auch den Fehler mitteilen, den ich gemacht habe, bevor ich zu dieser Lösung gekommen bin.

Ich hatte Resources sowohl in tomcatdir/conf/server.xml als auch in tomcatdir/conf/context.xml definiert. AllowLinking = "true" wurde nur in tomcatdir/conf/server.xml festgelegt. 

Was ich gefunden habe, war, dass, wenn Sie allowLinking nicht angeben, es gleich ist, es auf false zu setzen. Also entfernte ich das Ressourcen-Tag aus server.xml und beließ es nur tomcatdir/conf/context.xml mit dem Attribut allowLinking = "true".

3
Nare

Ich habe es anders gemacht. Ich bearbeite diese andere Konfigurationsdatei: Apache-Tomcat-7.0.33/conf / server.xml In Host Tag, das ich hinzugefügt habe:

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

Sie können also über: http: // localhost/data zugreifen.

1
Alberto Perez

Durch Hinzufügen der folgenden Zeile in conf/context.xml werden unter Apache Tomcat 8.5+ Softlinks für mich aktiviert

< Resources allowLinking = "true" cachingAllowed = "true" cacheMaxSize = "100000" >

0
gajanan malvade