Hvordan man autentiserer bruker manuelt med Spring Security

1. Oversikt

I denne raske artikkelen vil vi fokusere på hvordan du programmatisk setter en autentisert bruker i Spring Security og Spring MVC.

2. Vårsikkerhet

Enkelt sagt, Spring Security har hovedinformasjonen til hver godkjent bruker i en Trådlokal - representert som en Godkjenning gjenstand.

For å konstruere og sette dette Godkjenning objekt - vi må bruke samme tilnærming som Spring Security vanligvis bruker for å bygge objektet på en standardgodkjenning.

Til, la oss manuelt utløse godkjenning og deretter angi den resulterende Godkjenning objektet inn i strømmen SecurityContext brukt av rammeverket for å holde den påloggede brukeren:

UsernamePasswordAuthenticationToken authReq = nytt UsernamePasswordAuthenticationToken (bruker, pass); Autentisering auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth);

Etter innstilling av Godkjenning i sammenheng kan vi nå sjekke om den nåværende brukeren er autentisert - ved hjelp av securityContext.getAuthentication (). isAuthenticated ().

3. Vår-MVC

Som standard legger Spring Security til et ekstra filter i Spring Security-filterkjeden - som kan vedvare sikkerhetskonteksten (SecurityContextPersistenceFilter klasse).

I sin tur delegerer den utholdenheten til sikkerhetskonteksten til en forekomst av SecurityContextRepository, som standard HttpSessionSecurityContextRepository klasse.

Så for å angi godkjenningen på forespørselen, og dermed gjør den tilgjengelig for alle etterfølgende forespørsler fra klienten, må vi stille inn SecurityContext inneholder Godkjenning i HTTP-økten:

offentlig ugyldig pålogging (HttpServletRequest req, String user, String pass) {UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken (user, pass); Autentisering auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth); HttpSession session = req.getSession (true); session.setAttribute (SPRING_SECURITY_CONTEXT_KEY, sc); }

SPRING_SECURITY_CONTEXT_KEY er en statisk importert HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.

Det skal bemerkes at vi ikke kan bruke direkte HttpSessionSecurityContextRepository - fordi det fungerer sammen med SecurityContextPersistenceFilter.

Det er fordi filteret bruker depotet for å laste og lagre sikkerhetskonteksten før og etter utførelsen av resten av definerte filtre i kjeden, men det bruker en tilpasset innpakning over responsen som sendes til kjeden.

Så i dette tilfellet, bør du vite klassetypen på innpakningen som brukes og sende den til riktig lagringsmetode i depotet.

4. Konklusjon

I denne raske opplæringen gikk vi over hvordan du manuelt angir brukeren Godkjenning i vårsikkerhetssammenheng og hvordan den kan gjøres tilgjengelig for Spring MVC-formål, med fokus på kodeprøver som illustrerer den enkleste måten å oppnå det på.

Som alltid kan kodeeksempler bli funnet på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found