Kann ich einen Dienst in Grails in einen Filter injizieren?

8

Ich habe einen Service, um den Benutzer in der Sitzung zu bekommen und einzustellen. Ich möchte einige Benutzerinformationen an jede Ansicht weitergeben, wenn ein eingeloggter Benutzer vorhanden ist und dachte, ein Filter wäre der beste Weg, so dass ich das nicht in jedem Controller / Aktion duplizieren muss. Beim Ausführen der App wird folgender Fehler angezeigt:

%Vor%

Mein Filter sieht so aus:

%Vor%

Ich weiß, dass ich letztlich nur über session.user auf den Benutzer zugreifen kann, aber ich möchte userService.isLoggedIn () aufrufen können, was ich nicht einfach durch die Ansicht gehen kann. Also gibt es eine Möglichkeit, den Dienst in den Filter zu injizieren, oder sollte ich einfach eine Taglib erstellen, um userService.isLoggedIn () zu umbrechen?

    
varikin 29.09.2010, 22:28
quelle

3 Antworten

9

Es sieht so aus, als ob Ihr userService auf die Sitzung beschränkt ist und es nicht unbedingt eine Sitzung zu dem Zeitpunkt gibt, zu dem der Versuch unternommen wird, den Dienst in den Filter zu injizieren.

Wenn Ihr userService unbedingt auf eine Sitzung beschränkt ist, müssen Sie einen Bereichs-Proxy in Ihrer Spring-Konfiguration verwenden. Z.B. in Grails-App / conf / Frühling / Ressourcen.groovy:

%Vor%

Benenne dann deine injizierte Variable in deinem SecurityFilter:

%Vor%

(und natürlich umbenennen, wo Sie es woanders in der Klasse verwenden).

Dies sollte den Proxy zur Injektionszeit injizieren, aber nur zum eigentlichen Dienst gehen, wenn der Filter ausgeführt wird (wenn eine Sitzung stattfindet).

Hinweis: Nicht sicher, ob dies andere Bereiche, in denen es eine Sitzung gibt (z. B. Controller), weiterhin auf den Dienst als 'userService' verweist, andernfalls können Sie userServiceSession in userService in Ressourcen umbenennen. groovy (und update targetBeanName entsprechend).

    
Chris 30.09.2010 13:34
quelle
2

Es scheint, dass es Probleme mit Diensten in Filtern gibt. Dieser Fehler könnte Sie in die richtige Richtung weisen: Ссылка

Sie können auch versuchen, einen Verweis auf Ihren Service über ApplicationContext zu erhalten. Hier ein Beispiel: Wie bekomme ich eine Instanz? von einem Grails-Dienst programmgesteuert?

    
ataylor 29.09.2010 23:14
quelle
0
%Vor%     
Visme 04.09.2013 07:14
quelle

Tags und Links