Hent brukerinformasjon i vårsikkerhet

1. Oversikt

Denne artikkelen vil vise hvordan du gjør det hente brukeropplysningene i Spring Security.

Den for tiden autentiserte brukeren er tilgjengelig gjennom en rekke forskjellige mekanismer på våren - la oss dekke den vanligste løsningen - programmatisk tilgang, først.

2. Få brukeren i en bønne

Den enkleste måten å hente den nåværende autentiserte rektor er via en statisk samtale til SecurityContextHolder:

Autentiseringsautentisering = SecurityContextHolder.getContext (). GetAuthentication (); Streng currentPrincipalName = authentication.getName ();

En forbedring av denne kodebiten er først å sjekke om det er en godkjent bruker før du prøver å få tilgang til den:

Autentiseringsautentisering = SecurityContextHolder.getContext (). GetAuthentication (); hvis (! (autentiseringsinstans av AnonymousAuthenticationToken)) {String currentUserName = authentication.getName (); return currentUserName; }

Det er selvfølgelig ulemper ved å ha en statisk samtale som dette - redusert testbarhet av koden er en av de mer åpenbare. I stedet vil vi utforske alternative løsninger for dette veldig vanlige kravet.

3. Få brukeren i en kontroller

I en @Kontrollør merket bønne, det er flere alternativer. Rektor kan defineres direkte som et metodeargument og det vil bli riktig løst av rammeverket:

@Controller public class SecurityController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserName (Principal principal) {return principal.getName (); }}

Alternativt vi kan også bruke godkjenningstokenet:

@Controller public class SecurityController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserName (Authentication authentication) {return authentication.getName (); }}

API for Godkjenning klassen er veldig åpen slik at rammeverket forblir så fleksibelt som mulig. På grunn av dette, Spring Security rektor kan bare hentes ut som en Gjenstand og må støpes til riktig UserDetails forekomst:

UserDetails userDetails = (UserDetails) authentication.getPrincipal (); System.out.println ("Brukeren har autoriteter:" + userDetails.getAuthorities ());

Og til slutt, direkte fra HTTP-forespørselen:

@Controller public class GetUserWithHTTPServletRequestController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserNameSimple (HttpServletRequest request) {Principal principal = request.getUserPrincipal (); returner principal.getName (); }}

4. Få brukeren via et tilpasset grensesnitt

For å fullt ut utnytte våravhengighetsinjeksjonen og være i stand til å hente autentiseringen overalt, ikke bare i @Kontroller bønner, må vi skjule den statiske tilgangen bak en enkel fasade:

offentlig grensesnitt IAuthenticationFacade {Authentication getAuthentication (); } @Komponent offentlig klasse AuthenticationFacade implementerer IAuthenticationFacade {@Override public Authentication getAuthentication () {return SecurityContextHolder.getContext (). GetAuthentication (); }}

Fasaden avslører Godkjenning objekt mens du skjuler den statiske tilstanden og holder koden frakoblet og testbar:

@Controller offentlig klasse GetUserWithCustomInterfaceController {@Autowired private IAuthenticationFacade authenticationFacade; @RequestMapping (verdi = "/ brukernavn", metode = RequestMethod.GET) @ResponseBody offentlig String currentUserNameSimple () {Authentication authentication = authenticationFacade.getAuthentication (); returner authentication.getName (); }}

5. Få brukeren i JSP

Den nåværende autentiserte rektor kan også nås på JSP-sider, ved å utnytte våren sikkerhet taglib støtte. Først må vi definere taggen på siden:

Neste kan vi referer til rektor:

 godkjent som 

6. Få brukeren i Thymeleaf

Thymeleaf er en moderne, web-malmotor på serversiden, med god integrasjon med Spring MVC-rammeverket. La oss se hvordan du får tilgang til den nåværende autentiserte rektoren på en side med Thymeleaf-motoren.

Først må vi legge til thymeleaf-spring5 og thymeleaf-extras-springsecurity5 avhengigheter for å integrere Thymeleaf med Spring Security:

 org.thymeleaf.extras thymeleaf-extras-springsecurity5 org.thymeleaf thymeleaf-spring5 

vi kan referere til rektor på HTML-siden ved hjelp av sek: autoriser Egenskap:

 Autentisert som 

7. Konklusjon

Denne artikkelen viste hvordan du kan få brukerinformasjonen i en Spring-applikasjon, startende med den vanlige statiske tilgangsmekanismen, etterfulgt av flere bedre måter å injisere rektor på.

Implementeringen av disse eksemplene finnes i GitHub-prosjektet - dette er et Eclipse-basert prosjekt, så det skal være enkelt å importere og kjøre som det er. Når prosjektet kjører lokalt, kan du få tilgang til hjemmesiden HTML på:

// localhost: 8080 / spring-security-rest-custom / foos / 1

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