PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RMI Authentifizierung



kieselsteini
23-11-2006, 00:29
Hallo Java Freunde.
Ich möchte eine Client-Server Applikation mit RMI programmieren. Der User soll sich mit dem Client-Programm am Server einloggen können. Je nach Userlevel bekommt der User mehr oder weniger Rechte auf dem Server. Ich habe aus diesem Grund auf der Serverseite eine Login-Klasse programmiert, instanziert und freigegeben. Leider habe ich nun das Problem, dass für jeden Client der andockt die selbe Instanz der Klasse Login verwendet wird und ich so serverseitig ja keine Kontrolle darüber habe was der User darf oder nicht. Serverseitig verwende ich folgenden Code um die Klasse LoginImpl die das Interface Login implementiert anzumelden.



RemoteServer.setLog(System.out);
Registry registry = LocateRegistry.getRegistry();
LoginImpl login = new LoginImpl();
Login loginStub = (Login)UnicastRemoteObject.exportObject(login, 0);
registry.rebind("Login", loginStub);
System.out.println("Login angemeldet.");


Nun ist meine Frage. Kann ich vielleicht für jeden Client eine eigene Instanz der Klasse erzeugen?? Wie würdet ihr das programmieren? Ich habe schon in diversen Foren gesucht aber keine Lösung gefunden. Vielleicht bietet sich ja auch eine andere Programmiertechnik an....

Vielen Dank für Eure Hilfe!
Gruß, kieselsteini

anda_skoa
23-11-2006, 14:56
Dazu brauchst du ansich nur ein Objekt mit einer Methode, die dann zuerst vom Client aufgerufen wird, eine Instanz pro Client erzeugt und der Client dann damit arbeitet

Also in lokalem Code etwa so



public class SessionFactory
{
public Session createSession()
{
return new Session();
}
}

public class Session
{
public Login getLogin()
{
}
}


Session Factory ist die einzige registrierte Klasse, die von Clients direkt angesprochen werden kann.
Jeder Client holt sich dann eine Session Referenz, die dann alles für diesen Client macht, bzw überall als Kontext dienen kann, falls du doch noch weitere öffentliche Objekte haben willst.

Ciao,
_

kieselsteini
24-11-2006, 15:59
Hmm...irgendwie stehe ich auf dem Schlauch. Wenn ich die SessionFactory im RMI freigebe und der Client nur die Methode createNewSession sieht bekommt er ein Objekt Session zurück. Das wird dann serialisiert. Aber die Implementation von dem Objekt Session liegt doch dann auf der Clientseite? Wenn ich eine Methode dem Objekt Session verwende wird die doch nicht auf dem Server ausgeführt....aber genau sowas brauche ich.

p.s.: Danke für Deine schnelle Antwort.

Gruß, kieselsteini

anda_skoa
25-11-2006, 17:03
Ich kenne mich mit RMI jetzt nicht im Detail aus, aber ich dachte eswäre möglich, Session als Proxy für ein entsprechendes serverseitiges Partnerobjekt zu implementieren.

Je nach Sicherheit des Übertragungskanals kann man den gemeinsamen Identifier irgendwie absichern.

Ciao,
_