Spring: Klassen in anderer "Anmelden"

Status
Nicht offen für weitere Antworten.

SegFault

Bekanntes Mitglied
Ich hoffe ich kann das problem jetzt genau erklären. Das wird etwas umfangreicher.
Also folgendes:

Ich habe eine RMI application bei welcher ich mich an einen application server anmelden kann.
diese login Methode liefert mir ein ServiceObjekt über dem ich weitere anfregen stelle. Im server wird zu dem ServiceObjekt entsprechende Nutzerrechte gespeichert die ich weiterverwende.
[Java]
myService = RemoteService.login("foo","bar");
[/code]
ich kann in meinen Server jetzt ein Subservice anfordern auf den ich verschiedene subfunktionen ausühren kann.
Java:
mySubservice = myService.getSubservice();
mySubservice.liefereDatensätze()...
nun das problem am Server selbst. Damit ich im Subservice die Rechte abfragen kann muss ich wissen über welche Instanz von myService dieser Subservice angefordert wurde. Anfangs hatte ich das im Constructor der mySubservice Implementation übergeben. Da ich aber Spring verwende geht das gar nicht mehr so einfach. Wie krieg ich es jetzt also hin das wenn der client myService.getSubservice() aufgerufen wurde, die Implementation von mySubservice instanziert wird und myService als Objekt angemeldet wird über das die rechte abgefragt werden können. Ich könnte in das interface von mySubservice eine setServiceObjekt methode liefern. Aber das finde ich blöd weil ich das interface für die Spring sache und als Remote interface nutze. Und der client sollte die set... methode nicht kennen. Daher muss es doch auch irgendwie in Spring direkt eine methode geben mit der ich bei.
getBean("MySubservice"); das Serviceobjekt über das der Subservice angefordert wurde zu übergeben bzw in die klasse ein zu tragen.

Ich hoffe das Problem ist halbwegs verständlich.
 
M

maki

Gast
Ehrlich gesagt hört sich "subservice" für mich nach dem Problem an, bricht das sog. "Law of Demeter".
 

SegFault

Bekanntes Mitglied
wie kann ichs umgehen? Irgendwie muss ich mich um die rechtevergabe kümmern. Da im Server mehrere Clients eingeloggt sein können muss ich den Anfragen die Nutzer zuordnen. Und ich möchte nicht bei jeder Anfrage zusätzlich noch den User oder ähnliches mitsenden.
 

SegFault

Bekanntes Mitglied
D.H. beim Login würde ich anstatt myService eine Session bekommen? und mit dieser kann ich mir dann die verschiedenen Services holen?
 
M

maki

Gast
Das liegt doch gnz an dir, es könnte ja auhc mit einem Userobejkt geabreitet werden, oder einem Principal, oder oder oder
 
M

maki

Gast
Dann nimm doch ein Userobjekt und halte die Sachen einfach ;)

Ist dir das "Law of Demeter" klar?
 

Noctarius

Top Contributor
Beim Login generierst du eine eindeutige ID für jeden User (z.B. die UserId der DB + Timestamp *hust*) und sendest diese an den Client.

Der Client holt sich nun eine Instanz (eine Referenz) des eigentlichen Userservices und übergibt als ersten Parameter bei Methodenaufrufen die UserId und schwupp weißt du auf Serverseite welcher User das ist ;-)

Du kannst damit sogar mehrere gleiche Userlogins an verschiedenen Terminals auseinander halten (dank dem Timestamp ^^).
 

SegFault

Bekanntes Mitglied
"Law of Demeter" ist mir klar. Zumindest denke ich das. Soweit ich das verstanden habe, ist das die abhängigkeiten von anderen Klassen innerhalb einer klasse. D.H. ich sollte nicht meine Serviceklasse in einer anderen Klasse anmelden und in späteren Methodenaufrufen mit dieser Klasse weiterarbeiten. Ist das richtig? Arbeiten aber nicht andere Prinzipien genau damit? Model Controll View wurde uns z.B. so beigebracht das Controll Klassen auf genau diesen Weg bei den View Klassen angemeldet werden.

Aber zurück zum Thema: Ziel ist also folgendes
Code:
mySession = Service.login("blah","blubb");
subService = Service.getSubService(mySession);
 

SegFault

Bekanntes Mitglied
Wie mache ich das? Ich möchte Services mit lokalen Daten an Client übergeben. Leider Arbeitet Spring standardmässig mit Singletons. Was das ganze aushebt. Denn immer wenn ich das objekt exportieren will kommt eine Exception "Object Already Exported" wie kann ich also das ganze umstellen das jedesmal ein neues Objekt erzeugt wird.
 

SegFault

Bekanntes Mitglied
Von Hand kann ich nicht, da der Service ja Db Abfragen enthält. Ich brauche also das Spring Framework um auf die Datensätze zu kommen.
 

SegFault

Bekanntes Mitglied
Aktuell trenne ich nicht strikt das DAO und das Remote Interface, da die angebotenen Funktionen genau die selben sind.
Warum soll ich zwei interfaces halten wenn diese die gleichen funktionen anbieten?
 

SegFault

Bekanntes Mitglied
Mir fällt gerade nochwas auf. Ich könnte das ganze als Singleton verwenden, da ich keine lokalen Klassenvariablen benutzt. Muss ich explizit absichern wenn verschiedene nutzer zeitgleich auf bestimmte Aktionen zugreifen? Ansonsten laufen ja die DB Abfragen jeweils in transaktionen (Die gesamte Klasse ist auf @Transactional(propagation = Propagation.REQUIRED) ) gesetzt. Eigentlich sollte es klappen wenn ich sie als Singleton einsetze?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Spring DM: Problem mit Tomcat als OSGI-Service Application Tier 1
G Spring/Hibernate exception Application Tier 17
RaoulDuke Spring - Bugfixes in 2.5.x Application Tier 4
G Spring rollbackFor Application Tier 8
MQue Spring Security Form Application Tier 3
D Spring konfigurieren mit XML, Annotionen oder Java? Application Tier 2
MQue Spring in Zukunft Application Tier 5
I Passwort verschlüsseln in DB mit Spring Application Tier 5
MQue Spring https Application Tier 7
I Security bei Spring? Application Tier 31
MQue Spring beans Application Tier 10
I Wieviel Projekte bei Spring? Webprojekt Application Tier 2
G Transaktionen Spring Application Tier 58
Y Spring und Hibernate Application Tier 2
K Spring DI existierendes Objekt übergeben Application Tier 2
G Spring applicationContext Application Tier 3
MQue Spring Autowired Application Tier 7
MQue Spring Proxys Application Tier 2
D Problem beim Testen von einer Spring-Anwendung Application Tier 8
MQue Spring BeanFactoryPostProcessor Application Tier 3
MQue Spring ApplicationContext Application Tier 20
S Spring util:list in eine andere importieren Application Tier 15
MQue Einsatz von Spring Application Tier 13
M Konfiguration WebApp/Spring Host-abhängig Application Tier 5
E Migration altes Framework (SOFIA) auf Spring Application Tier 3
D Automatische Typkonvertierung in Spring Application Tier 5
D Spring und Hbernate konfigurieren bzw. verschalten Application Tier 5
A Spring: JSP nimmt style.css nicht an Application Tier 3
G Spring Security Frage fuer Fortgeschrittene Application Tier 2
Y Spring + MyFaces - Exception bei Serverstart Application Tier 1
Y Maven MyFaces Hibernate Spring - Projekt Application Tier 1
byte [Spring] Referenced Bean not found Application Tier 2
M Spring - Leichtgewichtiger als JBoss? Application Tier 4
D Spring: setter injection von statischer Methode? Application Tier 1
reibi Spring Beans - Grundsatzfrage Application Tier 3
thE_29 Spring und XFire Frage Application Tier 3
H spring Application Tier 2
R Spring und Hibernate3 - CGLib Enhancement failed Application Tier 2
S Spring 2.0 Tutorial gesucht Application Tier 2
M JBoss Seam - Spring Application Tier 11
G [Spring+JSF]: VariableResolver und Scopes? Application Tier 1
T Spring Autowire innerhalb von abstrakten Klassen Application Tier 2

Ähnliche Java Themen

Neue Themen


Oben