Spring: Statische Methode für HttpRequest vorhanden?

Hallo Zusammen,

ich habe eine Spring MVC Anwendung. Ich möchte nun gern zu Beginn (sobald sich ein Benutzer anmeldet) eine Variable in der Session des Users speichern.

Ganz klassisch mit httpServletRequest.getSession().setAttribute("test", "value");

Gibt es eine statische Methode bei Spring mit der ich eine Instanz des HttpServletRequest erhalte um eine Variable setzen zu können? Die ich von überall dann nutzen kann? Ähnlich der statischen Methode SecurityContextHolder.getContext() von Spring Security die mir überall in meiner Anwendung die Möglichkeit bietet den SecurityContext zu verwenden.

Danke und Grüße
Oliver
 
ich habe eine Spring MVC Anwendung. Ich möchte nun gern zu Beginn (sobald sich ein Benutzer anmeldet) eine Variable in der Session des Users speichern.
Warum nutzt du nicht das als Hook um nach einem erfolgreichen Einloggen genau das zu tun. Wenn du eh schon Spring Security nutzt geht das recht einfach.

Gibt es eine statische Methode bei Spring mit der ich eine Instanz des HttpServletRequest erhalte um eine Variable setzen zu können? Die ich von überall dann nutzen kann? Ähnlich der statischen Methode SecurityContextHolder.getContext() von Spring Security die mir überall in meiner Anwendung die Möglichkeit bietet den SecurityContext zu verwenden.
Nein, das hielte ich auch für hochgradig fragwürdig. Globale Variablen sind in 99% der Fälle ein Designflaw.

Gruß
Ollie
 
Danke erstmal für deine Antwort.

Warum nutzt du nicht das als Hook um nach einem erfolgreichen Einloggen genau das zu tun. Wenn du eh schon Spring Security nutzt geht das recht einfach.

Wie? Kannst du mir einen Tipp geben? Ich habe von Spring Security lediglich das Interface UserDetailsService implementiert. Was aber evtl. reichen könnte bzw. sollte, weil jeder User der sich anmeldet dort durch muss.

Vielen Dank und viele Grüße
Oliver
 
Nicht ganz. Der UserDetailsService wird ja nur nach den UserDetails gefragt. D.h. du weißt an der Stelle ja noch gar nicht, ob die Authentifizierung gelingen wird. Desweiteren sagt ja auch niemand, dass der Service nur für eine Authentifizierungsanfrage getriggert wird.

Spring Security feuert für erfolgreiche Authentifizierungen einen Event: http://static.springframework.org/s...rity/event/authorization/AuthorizedEvent.html
Die kannst du durch einfaches Implementieren eines ApplicationListeners und deklarieren der Bean in deinem Konfigurationsfile auf den Event reagieren. Mehr zum Thema Events in Spring hier: http://static.springframework.org/s...rence/beans.html#context-functionality-events

Gruß
Ollie
 
Hallo Oliver (und natürlich auch an den Rest :)),

Danke für den Hinweis auf den Event. Ich habe nun mal einen EventListener erstellt.

Code:
public class AuthorizedNotifier implements ApplicationListener {
	public void onApplicationEvent(ApplicationEvent event) {
		if (event instanceof AuthorizedEvent) {
			System.out.println("wowwwwwwww");
		}
	}
}

Dazu Bean konfiguriert. Funktioniert.

Aber ... 2 Fragen:

1. Der AuthorizedEvent wird bei (fast) jedem Request geworfen. Also nicht nur, wenn der User sich am Anfang einloggt, sondern auch noch später, wenn der Benutzer in der Anwendung Aktionen ausführt. Ist das normal oder habe ich da etwas falsch gemacht mit Spring Security?

2. Wie schaffe ich es nun in der onApplicationEvent Methode eine Session Variable für den Benutzer zu setzen? Ich habe doch hier keinen Zugriff auf den HttpServletRequest um das zu erledigen? :confused:

Vielen Dank für eure Hilfe.

Grüße
Oliver
 
Hier weiß keiner mehr weiter?

Ein Event in Spring Security das nur einmal ausgelöst wird und die Möglichkeit von jeder Stelle im Code eine Session Variable zu setzen beim User?

Danke und Grüße
Oliver
 
Zurück