Ich habe einen Frühling Boot-Anwendung, die eine spezielle Anforderung hat, wodurch Benutzer (UserDetails
impls) Rollen/Berechtigungen haben müssen, die im laufenden Betrieb ändern, nachdem sie authentifiziert hat.So aktualisieren Sie Spring Security UserDetails impls nach erfolgreicher Anmeldung?
Does Spring Security ermöglichen diese, oder muss ich meine eigene Rolle/Berechtigungssystem unabhängig von Frühling verwenden?
Mein Verständnis mit Spring Security ist, dass die UserDetails
impl geladen wird einmal (erfolgreich) Anmeldung und wird nie danach aktualisiert. Aber es muss möglich sein, den Benutzer/Principal im laufenden Betrieb zu aktualisieren, wie sonst würden Benutzer ihren Benutzernamen oder ihr Passwort bearbeiten, wenn sie angemeldet sind? Also nehme ich an, dass, wenn Benutzername/Passwort im laufenden Betrieb geändert werden kann, auch Rollen und erteilte Berechtigungen (Berechtigungen).
Aber für das Leben von mir kann ich nicht ein Beispiel für diese überall online, noch irgendwelche Javadocs finden, die erklären, wie dies zu tun. Würde das Benutzer-Caching auch hier in irgendeiner Weise beteiligt sein (das heißt, Spring Security-Cache-Benutzer, und müsste dieser Cache ebenfalls aktualisiert werden)?
Mein bester Versuch würde etwas so aussehen:
// My UserDetailsService impl:
public class MyUserDetailsService implements UserDetailsService {
@Resource
private UserCache userCache;
// Lots of stuff up here
public void updateUserOnTheFly(UserUpdates userUpdates) {
MyUser user = (MyUser)SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
MyUserUpdater updater = new MyUserUpdater();
// Set new roles/permissions here, as well as (perhaps) other
// things.
updater.update(user, userUpdates); // I believe this updates the
// SecurityContext's Authentication instance
userCache.removeUserFromCache(user); // Necessary to first remove?
userCache.putUserInCache(user);
}
}
Bin ich auf dem richtigen Weg oder Weg von hier Basis?
Danke für die Hilfe Patrik! – smeeb