Ich bin relativ neu in Spring und Spring Security.
Ich habe versucht, ein Programm zu schreiben, in dem ich einen Benutzer am Server mit Spring Security authentifizieren musste.
Ich habe mir Folgendes ausgedacht:
public class CustomAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider{
@Override
protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken)
throws AuthenticationException
{
System.out.println("Method invoked : additionalAuthenticationChecks isAuthenticated ? :"+usernamePasswordAuthenticationToken.isAuthenticated());
}
@Override
protected UserDetails retrieveUser(String username,UsernamePasswordAuthenticationToken authentication) throws AuthenticationException
{
System.out.println("Method invoked : retrieveUser");
//so far so good, i can authenticate user here, and throw exception if not authenticated!!
//THIS IS WHERE I WANT TO ACCESS SESSION OBJECT
}
}
Mein Anwendungsfall ist, dass ich bei der Authentifizierung eines Benutzers ein Attribut wie das folgende platzieren muss:
session.setAttribute("userObject", myUserObject);
myUserObject ist ein Objekt einer Klasse, auf die ich über mehrere Benutzeranforderungen hinweg im gesamten Servercode zugreifen kann.
quelle
<listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>
Da Sie Spring verwenden, bleiben Sie bei Spring und hacken Sie es nicht selbst wie die anderen Post-Positionen.
Das Spring-Handbuch sagt:
Die empfohlene Best Practice für den Zugriff auf die Sitzung lautet:
Der Schlüssel hier ist, dass Spring und Spring Security alle möglichen großartigen Dinge für Sie tun, wie z. B. die Verhinderung von Sitzungsfixierungen. Diese Dinge setzen voraus, dass Sie das Spring-Framework so verwenden, wie es verwendet werden soll. Machen Sie es in Ihrem Servlet kontextbezogen und greifen Sie wie im obigen Beispiel auf die Sitzung zu.
Wenn Sie nur einige Daten im Sitzungsbereich speichern müssen, versuchen Sie, eine Bean mit Sitzungsbereich wie in diesem Beispiel zu erstellen, und lassen Sie Autowire seine Magie entfalten. :) :)
quelle
Ich habe meine eigenen Utensilien gemacht. es ist praktisch. :) :)
quelle
In der Tat können Sie auf die Informationen aus der Sitzung zugreifen, selbst wenn die Sitzung auf einem HttpSessionLisener zerstört wird, indem Sie Folgendes tun:
Sie können auch überall dort auf die Informationen zugreifen, wo das HttpSession-Objekt verfügbar ist, z.
die letzte Annahme, dass Sie etwas haben wie:
quelle
Ich versuche es mit dem nächsten Code und arbeite hervorragend
quelle
Wenn Sie nur Details zum Benutzer benötigen, können Sie für Spring Version 4.x die von Spring bereitgestellten Tags verwenden
@AuthenticationPrincipal
und@EnableWebSecurity
kennzeichnen, wie unten gezeigt.Sicherheitskonfigurationsklasse:
Controller-Methode:
quelle
In meinem Szenario habe ich die HttpSession wie folgt in die CustomAuthenticationProvider-Klasse eingefügt
quelle
quelle