MySQL Datenbank Connection als String zurückgeben

BlackScorp21

Mitglied
Hallo Leute,

Ich habe mal eine Frage, zur java.sql.Connection.

Ausgangssituation:

Ich möchte aus meiner Anwendung heraus auf eine REST-Schnittstelle (JAX-RS) zugreifen, über die mit einer MySQL Datenbank kommuniziert wird. Bei meinem ersten Zugriff würde ich über

Code:
http://meinserver/restapi/login?user=test&pwd=test

die Benutzerdaten (username, password) übermitteln, um die Verbindung zu DB aufzubauen.
Dabei bekomme ich jetzt über folgende Zeilen

Code:
Class.forName( "com.mysql.jdbc.Driver" );
con = DriverManager.getConnection( "jdbc:mysql://MeinServer:3306/testDB", "user", "passwor" );

eine java.sql.Connection zurück mit der ich die Statements abfeuern kann.

Problem- bzw. Fragestellung:

Da ich aber jetzt nicht bei jeder REST Anfrage wieder ein neues Login mit Username und Passwort machen möchte, stellt sich mir die Frage ob es möglich ist die Connection im XML-Rückgabewert (Als String oder ähnliches) zurückzugeben.
Sodass ich beim nächsten Aufruf der REST-Schnittstelle den Connection-String mitgeben kann und daraus wieder eine Connection erstellt wird.

-Ist das möglich?
-Ist das sinnvoll?
-Welche Alternativen habe ich?

Würde mich freuen wenn mir hier jemand weiterhelfen kann. Danke.
BlackScorp21
 
Verstehe ich das richtig ??? Du willst die Verbindungsdaten zu deiner Datenbank per http ins Internet brüllen?
 
Deswegen frage ich ja ob man das so machen kann bzw. was für alternativen ich habe.
Ich muss doch jetzt nicht bei jedem REST Aufruf wieder meine Benutzerinformationen mit senden und eine neue Connection aufbauen oder?

Selbst dass ist schon ein Sicherheitsrisiko.

Du musst hier unterscheiden, zwischen den Benutzerinformationen die du brauchst um dich mit der Datenbank zu verbinden und solchen, um sich an deinem Service zu authentifizieren.

Die Kommunikation zwischen deiner Anwendung und der Datenbank erfolgt normalerweise mittels eines festgelegten Benutzers. D.h. Die Db-Connection, Username und Passwort sind deiner Anwendung bekannt aber sonst niemandem(abgesehen von i-welchen admins natürlich).

Das was du dann beim Request mitsendest sind Anmeldeinformationen, die es einem Nutzer erlauben sich an deiner Anwendung zu authentifizieren.

Ich hoffe das war jetzt einigermaßen verständlich .... bin grad etwas in Eile sry
 
Danke erst mal für die schnellen Antworten.

Die Kommunikation zwischen deiner Anwendung und der Datenbank erfolgt normalerweise mittels eines festgelegten Benutzers. D.h. Die Db-Connection, Username und Passwort sind deiner Anwendung bekannt aber sonst niemandem(abgesehen von i-welchen admins natürlich).

Also würdest du beispielsweise

user: "myDBUser"
pw: "myDBPwd"

direkt in der REST Klasse hinterlegen, damit es nicht gesendet werden muss?

Und die Authentifiezierung würdest du über den Header des Http-Services encoded (in Flex weiß ich gibt es ne Klasse Base64Encoder) mitsenden, sodass der Server dann entscheidet, ob die Restanfrage des Benutzers durch darf oder nicht?

Also beispielsweise gegen LDAP, Konfigdatei oder DB beim JBoss authentifizieren.

Würde mich freuen, wenn du bei gelegenheit dich noch einmal melden könntest, ob ich das richtig verstanden habe. Möchte nicht gleich am Anfang mit REST solche Fehler machen.

Danke.
 
Also würdest du beispielsweise

user: "myDBUser"
pw: "myDBPwd"

direkt in der REST Klasse hinterlegen, damit es nicht gesendet werden muss?
Mehr oder weniger. Du solltest sowas wie eine Zugriffsschicht auf die DB haben. Diese braucht für das Management von Connections die Login-Informationen. Üblicherweise werden die in Properties oder XML-Konfigurationsdateien abgelegt. Wenn Du ganz toll sein willst, lässt Du Deinen Webcontainer (Tomcat?) einen Pool von Connections managen, die Du Dir aus Deiner Webanwendung über JNDI besorgst.

Und die Authentifiezierung würdest du über den Header des Http-Services encoded (in Flex weiß ich gibt es ne Klasse Base64Encoder) mitsenden, sodass der Server dann entscheidet, ob die Restanfrage des Benutzers durch darf oder nicht?
Da sehe ich zwei Möglichkeiten. Die erste wäre, einen Login so wie von Dir angedacht zu implementieren. Im Webcontainer merkst du Dir in einer Session, ob jemand eingeloggt ist oder nicht. Die Session-ID musst Du dann bei jedem Request als Cookie oder URL-Parameter mitsenden. Das widerspricht aber etwas dem REST-Gedanken, wo man eher versucht, ohne Sessions auszukommen. Dafür gibt es HTTP-Auth (also das mit dem Header), die ich Dir empfehlen würde. Fang erstmal mit Basic-Auth an bis alles läuft. Schaue Dir danach "Digest-Auth" an. Damit werden die Login-Informationen auch bei einer unverschlüsselten HTTP-Verbindung verschlüsselt.
 
Das ist soweit korrekt .... allerdings

Also würdest du beispielsweise

user: "myDBUser"
pw: "myDBPwd"
direkt in der REST Klasse hinterlegen, damit es nicht gesendet werden muss?

würde ich das nicht unbedingt hart verdrahtet in eine java Klasse schreiben, da du sonst falls sich die connection zur DB mal ändern deine Anwendung neu Kompilieren musst.

Diese Informationen sollten also entweder in einem Properties-File o.ä liegen. Oder noch besser du definierst in deinem JBoss eine JNDI-Datasource.
 

Neue Themen


Zurück
Oben