Laden einer Datei vom Netzlaufwerk mit LDAP-Authentifizierung

Kalito87

Mitglied
Hallo,

ehrlicherweise habe ich erst vor kurzen mit Java angefangen. Anhand eines Pfad möchte ich mittels Spring Boot prüfen, ob eine Datei existiert. Soweit kein Problem. Nun hat sich aber ergeben, das in der Produktions-Umgebung dieser Pfad nur durch einen LDAP-Nutzer erreichbar ist. Wie muss ich meinen bestehenden Code anpassen? Habe bis dato leider nichts brauchbares gefunden.

Java:
public Boolean pdf_exist(String bill_number)
    {
        Invoice invoice = invoiceRepository.findByBillNumber(bill_number);

        if (invoice != null)
        {
            File tempFile = new File(invoice.getPdfPath());
            return tempFile.exists();
        }
        else
        {
            return false;
        }
    }

Danke und Gruß
Patrick
 

KonradN

Super-Moderator
Mitarbeiter
Meine erster Gedanke ist nicht zielführend und ging von einem Zitat für Simpsons Kenner: "HA HA" bis hin zu: "Einer ist immer der Looser" :)
Der zweite Gedanke war: "mein herzliches Beileid!" (Machst Du Software Entwicklung beruflich? Komm doch zu uns - dann hast Du dieses Problem nicht mehr! *SCNR*)

Aber lassen wir den Spaß mal beiseite und kümmern wir uns etwas um die Problematik selbst:

a) Du arbeitest in der Java VM eigentlich losgelöst von vielen Dingen. Du setzt also auf dem auf, was das Betriebssystem Dir zur Verfügung stellt. Du hast dabei in der Regel keine explizite User-Anmeldung zum Betriebssystem und setzt darauf auf. Das ist etwas, das wunderbar funktioniert z.B. im Windows Domain Bereich: Du hast also einfach eine User-Anmeldung auf dem Betriebssystem und dann hat der User gewisse Rechte. Dank Windows Domain hast Du ein Rechtesystem innerhalb der Domain bzw. des Forrest. Damit musst Du dann nichts mehr machen innerhalb der Java Anwendung. Das alles nützt Dir aber vermutlich nichts, denn wenn dies Dein Szenario wäre, dann wäre vermutlich die Frage nicht gestellt worden.
(Evtl. noch als Anmerkung: Das geht auch mit nicht Windows Systemen. Es gibt auch auf anderen Systemen entsprechende Lösungen. Das ist halt Kerberos und da hat man auf dem Mac klist, kinit, .... Unter Linux gibt es da recht viel mit Samba und Co, .... )

b) Die diversen Mechanismen kann man dann auf Betriebssystemebene nutzen / konfigurieren. Das ist oft mit das Einfachste, aber macht es relativ komplex und ist dann natürlich nicht vom Betriebssystem unabhängig. Aber sowas kann man auch bauen - dann wird halt sowas wie ein net use aufgerufen (bei Windows) und bei anderen Systemen halt andere Befehle ...

c) Pure Java Lösungen - Da Java eine universelle Programmiersprache ist, kann sowas natürlich auch in Java selbst erfolgen. Der Dateizugriff ist halt dieses SMB Protokoll (Davon gehe ich erst einmal aus. Das ist halt so das übliche bei Netzlaufwerken. Die anderen Alternativen haben sonst keine LDAP Authentifizierung wie NFS oder sie sind deprecated wie Apple mit seinem AFP).
Wenn man da schaut, dann kommt man auf Lösungen wie: https://www.jcifs.org/ oder https://github.com/Waffle/waffle
Ob dies aber zielführend ist, weiss ich nicht, da ich damit keine Erfahrung habe.

Generell sollte aus meiner Sicht der Punkt a) genutzt werden. Da können Admins sich den Kopf zerbrechen, wie Systeme konfiguriert werden. Ansonsten hast Du ein sehr großes Thema an der Backe incl. Security, reagieren auf diverse Konfigurationen und neue Versionen, ...
Das sollten bitte andere machen und nicht wir Entwickler! (So wir nicht eben diese Produkte entwickeln. Die Entwickler bei Microsoft sollen sich da natürlich intensiv drum kümmern :) )

Und man sollte ansonsten immer überlegen, was es für Alternativen gibt:
- Wenn es um File Transfer geht, dann gibt es da einige Protokolle, die nur für sowas da sind: FTPS, SFTP aber auch HTTPS und so.
- Gerade aus Sicht eines Entwicklers gibt es da auch Standards, die wir gerne nutzen da viel Arbeit durch Frameworks abgedeckt wird. Also REST Webservices fällt mir da direkt ein.
 

Kalito87

Mitglied
hallo,

erst einmal vielen Dank für deine ausführliche Antwort.

Da es sich nur um eine interne Anwendung für den Eigengebrauch handelt, kann ich von einer definierten Konstellation beim Netzwerk ausgehen. Eventuell hilft es die Anforderung zu beschreiben. Bei der Applikation handelt es sich um eine REST-API. Neben der Prüfung, ob die PDF existiert, soll diese später per Mail versendet werden.

Wenn ich dich richtig verstehe, würde es ausreichen, wenn der spezielle User die Jar startet. Wenn dann die Abfrage erfolgt, sollte der Zugriff funktionieren. Wie sieht es mit diesem Plugin (https://github.com/spring-projects/spring-integration-extensions/tree/main/spring-integration-smb) aus? Sah auf dem ersten Blick vielversprechend aus.

Gruß Patrick
 

KonradN

Super-Moderator
Mitarbeiter
Das Spring Modul setzt auf JCIFS auf. Wenn Du Spring nutzt, dann wäre das ein Weg, den man gehen kann. Aber da ist die Frage, in wie weit dies so notwendig ist.

- Wieso sind das PDF und die Spring Applikation auf unterschiedlichen Systemen? Wäre es nicht denkbar, hier direkt auf einem System zu bleiben?
- "Wenn ich dich richtig verstehe, würde es ausreichen, wenn der spezielle User die Jar startet." Das wäre aus meiner Sicht die beste Lösung. Wenn es eine reine Windows Umgebung ist, dann musst Du gar nichts spezielles machen. Du greifst dann vermutlich einfach auf den UNC Pfad zu, also etwas wie \\server\freigabe\pfad\datei und der ganze Rest wird von Windows übernommen:
---> Option 1: Wenn der User direkt schon die Rechte hat (dies wäre der Fall, wenn der User die notwendigen Rechte z.B. über einen Domain Login bekommen hat), dann ist gar nichts weiter zu machen.
---> Option 2: Der User braucht keine expliziten Rechte zu bekommen. Es kann auch ein anderer User genutzt werden. Dieser wird dann gespeichert und kann über die Systemsteuerung -> Benutzer eingetragen oder geändert werden (Der Pfad wie man das erreicht ist immer etwas unterschiedlich je nach Windows Variante und wie die Systemsteuerung eingestellt ist. Was Du suchst ist "Windows-Anmeldeinformationen".) Alternativ kann man wohl bei dem Mappen des Laufwerks über den Explorer sagen,. dass andere Credetials genutzt werden sollen und dass diese gespeichert werden sollen. Dann landet das auch da drin.

Das ist generell gut, denn so hast Du nichts mit dem Passwort zu tun. Niemand muss ein User / Passwort eingeben und Du musst nichts speichern und so. Daher ist das mit das Beste, was Du machen kannst. Bei allen anderen Lösungen musst Du mit diesen kritischen Informationen herum hantieren und Du bist dann als Entwickler verantwortlich. Bei internen Projekten mag es egal sein, aber wenn mal ein Security Audit kommen sollte, will man sich das Leben nicht unnötig schwer gemacht haben.

Bei so einem Zugriff bist Du dann auch am universellsten. Wenn sich da etwas ändern sollte, dann ist es einfach egal. Du greifst auf einen Pfad zu - der kann lokal sein oder über irgend ein Protokoll woanders liegen.

Daher wären das so meine Ideen und Vorschläge. Aber Dein Weg über das Spring Modul um direkt mit SMB irgendwas zu machen müsste auch gehen. Rein technisch ist der Weg also nicht wirklich zu beanstanden so meine Argumente nicht überzeugend sein sollten (So Entscheidungen werden halt oft von anderen getroffen und wir Entwickler müssen dann teilweise Anforderungen umsetzen ohne über die diskutieren zu können.

Ich hoffe aber, dass ich Dir interessante Alternativen aufzeigen konnte und vielleicht konnte ich Dir damit Dein Leben etwas einfacher machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Laden der Hibernate Cfg in .jar Frameworks - Spring, Play, Blade, Vaadin & Co 5
J Resolver für XML Schema Location beim Laden des Spring Application Context Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Wie kann ich im Tomcat ResourceBundle über JPA + Spring laden Frameworks - Spring, Play, Blade, Vaadin & Co 2
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
A WebClientBuilder Rückgabe einer Liste Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
Christopher865 Netflix Eureka: Zwei Server - Einer stürtzt ab Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Mehere gleichnamige Konfigurationsparameter in einer application.properties Frameworks - Spring, Play, Blade, Vaadin & Co 3
pkm Wie kann man in Vaadin einer Zeile mit ThemeResource einen ClickEventListener geben? Frameworks - Spring, Play, Blade, Vaadin & Co 0
OnDemand JUnit testen einer private Methode Frameworks - Spring, Play, Blade, Vaadin & Co 5
Avalon Mehrere Methoden in einer Klasse testen Frameworks - Spring, Play, Blade, Vaadin & Co 21
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
E Spring Webflow zwei POJO's in einer View Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Spring: Den Context einer bean auslesen... Frameworks - Spring, Play, Blade, Vaadin & Co 3
B Wert in einer while schleife überspringen Frameworks - Spring, Play, Blade, Vaadin & Co 7
J zu einer Zeile zürück springen Frameworks - Spring, Play, Blade, Vaadin & Co 9
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Wohin gehört diese Datei? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Vesionsnummern aus externer Datei - sinnvoll und wenn ja wie ? Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Ich kann in dieser datei keine Daten speichern Frameworks - Spring, Play, Blade, Vaadin & Co 5
Avalon CSS Datei wird in Spring Boot mit Thymeleaf im Standardordner nicht gefunden Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Spring Actions ohne zugehörige JSP View Datei ausführen Frameworks - Spring, Play, Blade, Vaadin & Co 0
R Txt Datei mit Notepad öffnen und zu bestimmter Zeile springen Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Datei auslesen , Leerzeile überspringen Frameworks - Spring, Play, Blade, Vaadin & Co 15
S Spring Bean aus Datei referenzieren? Frameworks - Spring, Play, Blade, Vaadin & Co 2

Ähnliche Java Themen

Neue Themen


Oben