PDA

View Full Version : Zugriff auf Filesystem



KM
30-03-07, 10:37
Hallo,

nachdem ich ja inzwischen erfolgreich den Tomcat Servlet Container installiert habe, und auch die ersten Servlets darauf laufen, bin ich jetzt auf ein Problem beim Zugriff auf das Filesystem gestoßen.

Es läuft ein Servlet, das über UNC auf das Filesystem eines anderen Servers zugreifen will, um dort eine TIFF-Grafik aus einem Verzeichnis einzulesen. Die TIFF soll bearbeitet werden (gedreht und skaliert) und dann auf einen weiteren Server abgespeichert werden.

Wenn ich auf das lokale Filesystem zugreife, funktioniert das auch problemlos. Nur wenn ich auf einen anderen Server zugreife (z.B. \\Server\Freigabe\Datei.tiff), dann erhalte ich den Fehler "Zugriff verweigert"). Zunächst dachte ich es liegt an Verzeichnis- bzw. Dateiberechtigungen. Da aber jeder Vollzugriff hat, scheint es nicht daran zu liegen. Ich vermute eher, dass das eine Sicherheitseinschränkung durch den Tomcat ist. Kann das sein ? Kann ich das irgendwie umgehen ? Denn ich müsste wirklich auf andere Server zugreifen.

Gruß,
KM

RobertPic
30-03-07, 11:56
Es läuft ein Servlet, das über UNC auf das Filesystem eines anderen Servers zugreifen will...
Also UNC sagt mir jetzt nichts, was meinst du damit?


Nur wenn ich auf einen anderen Server zugreife (z.B. \\Server\Freigabe\Datei.tiff), dann erhalte ich den Fehler "Zugriff verweigert").

Meines Wissens kann Java nicht direkt auf die Freigaben zugreifen. Mappe einmal die Freigabe (im Windows) und greife über den Laufwerksbuchstaben zu. (zwecks Test)

Um direkt auf die Smb/Windows zugreifen zu können, benötigst du die Lib jCIFS.



InputStream (http://www.google.com/search?sitesearch=java.sun.com&q=allinurl%3Aj2se%2F1+5+0%2Fdocs%2Fapi+InputStream ) in =
new SmbFileInputStream( "smb://user:passwd@host/c/My Documents/doc.txt" );
byte[] b = new byte[ 8192 ];
for ( int n; ( n = in.read( b )) > 0; )
out.write( b, 0, n );

Ich werde die Lib auch demnächst auf der AS/400 einsetzten - das QNTC nervt mitunter (reconnect, timeout...).

KM
30-03-07, 12:12
Hallo Robert,

mit UNC ist der Zugriff über SMB gemeint. SMB greift ja über UNC-Pfade zu (z.B. \\Server\Freigabe\Datei.tiff).

Ich hatte auch schon auf dem Server, auf dem der Tomcat läuft, ein Netzlaufwerk zu dem anderen Server hergestellt und dann versucht die Datei über diesen Pfad (inkl. Laufwerksbuchstaben) anzusprechen. Aber das funktioniert auch nicht (Zugriff verweigert). Das muß irgendeine Einschränkung vom Tomcat-Server sein. Evtl. eine Policy-Einstellung ? Der Tomcat-Server scheint standardmäßig keinen Zugriff auf einen anderen Server zu erlauben.

Gruß,
KM

RobertPic
30-03-07, 13:36
Da fallen mir 3 Sachen ein:

1.) Unter welchem Benutzer läuft der Tomcat-Dienst (Systemsteuerung/Dienste/Apache Tomcat/Eigenschaft). Versuch dort einmal einen Benutzer der sicher auf dem Netzwerklaufwerk was tun darf.

2.) die richtige Anzahl der slash?
Wenn du mit Backslah arbeitest muss da ungefähr so aussehen:
\\\\Server\\Freigabe\\Datei.tiff

oder halt
//Server/Freigabe/Datei.tiff

3.) Darf die Datei geändert auch werden? ev. Lockmode ändern

Achja, ich konnte bei meinem Tomcat (allerdings die Eclipse-Instanz) problemlos vom Netz kopieren.


BTW:
Habe ich gerade getestet: Unter Windows geht der Zugriff mit \\server\freigabe\datei.ext

Das geht aber nur unter Windows! Wenn es auf jeder Plattform gehen soll, braucht man die jCFIS-Lib. (sowie bei uns: Windows, Linux, i5)

KM
30-03-07, 14:26
1.) Unter welchem Benutzer läuft der Tomcat-Dienst (Systemsteuerung/Dienste/Apache Tomcat/Eigenschaft). Versuch dort einmal einen Benutzer der sicher auf dem Netzwerklaufwerk was tun darf.

Das war's. Ich habe beim Tomcat-Dienst jetzt einen Benutzer eingetragen, der sowohl auf dem externen Windows-Server, als auch auf der iSeries existiert. Und damit funktioniert's.


2.) die richtige Anzahl der slash?
Wenn du mit Backslah arbeitest muss da ungefähr so aussehen:
\\\\Server\\Freigabe\\Datei.tiff

Genau so habe ich die Anzahl an Slashs angegeben. So passt's auch.


BTW:
Habe ich gerade getestet: Unter Windows geht der Zugriff mit \\server\freigabe\datei.ext

Das geht aber nur unter Windows! Wenn es auf jeder Plattform gehen soll, braucht man die jCFIS-Lib. (sowie bei uns: Windows, Linux, i5)

Auf der iSeries geht der Zugriff mit diesem UNC-Pfad auch. Bei Linux weiß ich das nicht. Das brauche ich auch nicht. Ist aber ein guter Hinweis mit dem jCIFS. Muß ich mir mal anschauen. Was hat das für Vorteile gegenüber dem direkten Zugriff über den UNC-Pfad ?

Damit kann ich nun mit meinem Servlet (das unter Tomcat auf einem Windows-Server läuft) auf einen zweiten Windows-Server zugreifen, um TIFF-Dateien einzulesen. Diese werden im Servlet modifiziert und per UNC-Pfad (\\iSeries\home\Datei.tiff) auf der iSeries abgespeichert. Das ist genau das, was ich wollte.

Vielen Dank nochmal für den Hinweis mit dem Benutzer. Trotz vorhandenem Gast-Benutzerprofil und Berechtigung "Jeder Vollzugriff" musste wohl trotzdem ein gültiger Benutzer für den Tomcat-Dienst eingetragen werden.

Danke,
KM

RobertPic
30-03-07, 15:59
Auf der iSeries geht der Zugriff mit diesem UNC-Pfad auch. Bei Linux weiß ich das nicht.

Bei mir (V5R2) geht der UNC-Zugriff nicht - weder in der PASE-Umgebung noch mit Java. Wozu haben die dann das QNTC gemacht?




..Hinweis mit dem jCIFS..Was hat das für Vorteile gegenüber dem direkten Zugriff über den UNC-Pfad ?


Ich habe mich mit UNC nicht beschäftigt - auf die schnelle habe ich nur eine Längenbeschränkung (26Stellen) gefunden.
Ein Vorteil von von jCFIS ist sicher, dass man User+Passwort extra angeben kann. Ansonsten wird man es wohl nicht brauchen, wenn man auch via UNC zugreifen kann.

Fuerchau
30-03-07, 16:36
Wie der Name schon sagt:

QNTC, sprich WindowsNT/XP/2000

Für Linuxfreigaben kann man mittels "Mount" Verbindung von der AS/400 aufnehmen.
Dies funktioniert ggf. auch mit Windows-Büchsen.