Wenn Sie Benutzerobjekt benötigen, empfehle ich Ihnen, abrufen „frisch“ (aus der DB) Benutzerinstanz vor jeder springSecurityService
das injizierte mit:
springSecurityService.principal.username
Aber wenn Sie nur einen Benutzernamen benötigen - man könnte eine Session-scoped Bean erstellen und mit Benutzernamen an die bevölkern Erstellungszeit:
resources.groovy:
...
userNameHolder(UserNameHolder) { bean ->
bean.scope = 'session'
springSecurityService = ref("springSecurityService")
}
...
Und:
class UserNameHolder {
def springSecurityService
String username = springSecurityService.principal.username
String getUsername() {
username
}
}
Dann sollten Sie benötigt UserNameHolder
an die Orte injizieren und den Benutzernamen abzurufen:
class SomeService {
def userNameHolder
void someMethod() {
...
userNameHolder.username
...
}
...
}
Viel Spaß!
UPD:
Man könnte fast das gleiche tun, indem Sie Benutzernamen in die Httpsession setzen, aber es wäre viel weniger kontrollierbar und überprüfbar sein. Daher empfehle ich dringend, eine Session-Scoped Bean zu verwenden.
Erstellen Sie eine Klasse mit dem Namen BaseController und machen Sie jeden Controller erweitern Sie dann eine geschützte Methode in es, zugänglich von allen. – Raphael