Nachdem ein neuer Benutzer ein Formular "Neues Konto" eingereicht hat, möchte ich diesen Benutzer manuell anmelden, damit er sich nicht auf der folgenden Seite anmelden muss.
Die normale Formular-Anmeldeseite, die den Spring Security Interceptor durchläuft, funktioniert einwandfrei.
Im New-Account-Form-Controller erstelle ich ein UsernamePasswordAuthenticationToken und setze es manuell im SecurityContext:
SecurityContextHolder.getContext().setAuthentication(authentication);
Auf derselben Seite überprüfe ich später, ob der Benutzer angemeldet ist mit:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Dies gibt die Berechtigungen zurück, die ich zuvor in der Authentifizierung festgelegt habe. Alles ist gut.
Wenn jedoch derselbe Code auf der nächsten Seite aufgerufen wird, die ich lade, lautet das Authentifizierungstoken nur UserAnonymous.
Mir ist nicht klar, warum die bei der vorherigen Anforderung festgelegte Authentifizierung nicht beibehalten wurde. Irgendwelche Gedanken?
- Könnte es daran liegen, dass die Sitzungs-IDs nicht richtig eingerichtet sind?
- Gibt es etwas, das meine Authentifizierung möglicherweise irgendwie überschreibt?
- Vielleicht brauche ich nur einen weiteren Schritt, um die Authentifizierung zu speichern?
- Oder muss ich etwas tun, um die Authentifizierung während der gesamten Sitzung zu deklarieren, anstatt irgendwie eine einzelne Anfrage?
Ich suche nur nach Gedanken, die mir helfen könnten zu sehen, was hier passiert.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Es funktioniert und ist üblich, aber es gibt schwerwiegende Funktionsmängel, auf die Sie stoßen werden, wenn Sie dies einfach tun. Weitere Informationen finden Sie in meiner Frage und in der Antwort: stackoverflow.com/questions/47233187/…