Sådan manuelt godkendes bruger med Spring Security

1. Oversigt

I denne hurtige artikel vil vi fokusere på, hvordan man programmatisk indstiller en godkendt bruger i Spring Security og Spring MVC.

2. Forårssikkerhed

Kort sagt, Spring Security har de vigtigste oplysninger om hver godkendt bruger i en Trådlokal - repræsenteret som en Godkendelse objekt.

For at konstruere og indstille dette Godkendelse objekt - vi skal bruge den samme tilgang, som Spring Security typisk bruger til at bygge objektet på en standardgodkendelse.

Lad os manuelt udløse godkendelse og derefter indstille den resulterende Godkendelse objekt i strømmen Sikkerhedskontekst bruges af rammen til at holde den aktuelt loggede bruger:

UsernamePasswordAuthenticationToken authReq = nyt UsernamePasswordAuthenticationToken (bruger, pas); Authentication auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth);

Efter indstilling af Godkendelse i konteksten kan vi nu kontrollere, om den aktuelle bruger er godkendt ved hjælp af securityContext.getAuthentication (). isAuthenticated ().

3. Forår MVC

Som standard tilføjer Spring Security et ekstra filter i Spring Security-filterkæden - som er i stand til at opretholde sikkerhedskonteksten (SecurityContextPersistenceFilter klasse).

Til gengæld delegerer den vedholdenheden af ​​sikkerhedskonteksten til en forekomst af SecurityContextRepository, som standard er HttpSessionSecurityContextRepository klasse.

Så for at indstille godkendelsen på anmodningen og dermed gøre det tilgængeligt for alle efterfølgende anmodninger fra klienten, skal vi manuelt indstille Sikkerhedskontekst indeholdende Godkendelse i HTTP-sessionen:

offentligt ugyldigt login (HttpServletRequest req, String user, String pass) {UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken (user, pass); Authentication auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth); HttpSession session = req.getSession (sand); session.setAttribute (SPRING_SECURITY_CONTEXT_KEY, sc); }

SPRING_SECURITY_CONTEXT_KEY er en statisk importeret HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.

Det skal bemærkes, at vi ikke direkte kan bruge HttpSessionSecurityContextRepository - fordi det fungerer sammen med SecurityContextPersistenceFilter.

Det skyldes, at filteret bruger arkivet for at indlæse og gemme sikkerhedskonteksten før og efter udførelsen af ​​resten af ​​definerede filtre i kæden, men det bruger en brugerdefineret indpakning over det svar, der sendes til kæden.

Så i dette tilfælde skal du kende klassetypen for den anvendte indpakning og videregive den til den relevante gemningsmetode i arkivet.

4. Konklusion

I denne hurtige vejledning gik vi over, hvordan man manuelt indstillede brugeren Godkendelse i forårssikkerhedssammenhæng, og hvordan det kan gøres tilgængeligt til Spring MVC-formål med fokus på kodeprøver, der illustrerer den enkleste måde at opnå det på.

Som altid kan kodeeksempler findes på GitHub.


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