De gebruiker handmatig verifiëren met Spring Security

1. Overzicht

In dit korte artikel zullen we ons concentreren op het programmatisch instellen van een geverifieerde gebruiker in Spring Security en Spring MVC.

2. Lente-beveiliging

Simpel gezegd, Spring Security bewaart de belangrijkste informatie van elke geverifieerde gebruiker in een ThreadLocal - weergegeven als een Authenticatie voorwerp.

Om dit te construeren en in te stellen Authenticatie object - we moeten dezelfde benadering gebruiken die Spring Security doorgaans gebruikt om het object op een standaardauthenticatie te bouwen.

Laten we de authenticatie handmatig activeren en vervolgens het resulterende Authenticatie object in de stroom SecurityContext gebruikt door het framework om de momenteel ingelogde gebruiker vast te houden:

UsernamePasswordAuthenticationToken authReq = nieuwe UsernamePasswordAuthenticationToken (gebruiker, wachtwoord); Authenticatie auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth);

Na het instellen van de Authenticatie in de context kunnen we nu controleren of de huidige gebruiker is geauthenticeerd - met behulp van securityContext.getAuthentication (). isAuthenticated ().

3. Veer MVC

Spring Security voegt standaard een extra filter toe aan de filterketen van Spring Security - die in staat is om de beveiligingscontext (SecurityContextPersistenceFilter klasse).

Het delegeert op zijn beurt de persistentie van de beveiligingscontext naar een instantie van SecurityContextRepository, standaard ingesteld op de HttpSessionSecurityContextRepository klasse.

Dus om de authenticatie op het verzoek in te stellen en dus, stel het beschikbaar voor alle volgende verzoeken van de klant, moeten we de SecurityContext met de Authenticatie in de HTTP-sessie:

openbare ongeldige login (HttpServletRequest req, String-gebruiker, String-pass) {UsernamePasswordAuthenticationToken authReq = nieuwe UsernamePasswordAuthenticationToken (gebruiker, pass); Authenticatie auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth); HttpSession-sessie = req.getSession (true); session.setAttribute (SPRING_SECURITY_CONTEXT_KEY, sc); }

SPRING_SECURITY_CONTEXT_KEY is een statisch geïmporteerd HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.

Opgemerkt moet worden dat we de HttpSessionSecurityContextRepository - omdat het werkt in combinatie met de SecurityContextPersistenceFilter.

Dat komt omdat het filter de repository gebruikt om de beveiligingscontext voor en na de uitvoering van de rest van de gedefinieerde filters in de keten te laden en op te slaan, maar het gebruikt een aangepaste wrapper over het antwoord dat aan de keten wordt doorgegeven.

Dus in dit geval moet u het klassetype van de gebruikte wrapper kennen en deze doorgeven aan de juiste opslagmethode in de repository.

4. Conclusie

In deze korte zelfstudie hebben we besproken hoe u de gebruiker handmatig kunt instellen Authenticatie in de Spring Security-context en hoe het beschikbaar kan worden gemaakt voor Spring MVC-doeleinden, met de nadruk op de codevoorbeelden die de eenvoudigste manier illustreren om dit te bereiken.

Zoals altijd zijn codevoorbeelden te vinden op GitHub.