Hent brugeroplysninger i Spring Security

1. Oversigt

Denne artikel viser, hvordan man gør det hente brugeroplysningerne i Spring Security.

Den aktuelt godkendte bruger er tilgængelig gennem en række forskellige mekanismer i foråret - lad os dække den mest almindelige løsning - programmatisk adgang, først.

2. Få brugeren i en bønne

Den enkleste måde at hente den aktuelt godkendte hovedstol er via et statisk opkald til SecurityContextHolder:

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

En forbedring af dette uddrag kontrollerer først, om der er en godkendt bruger, før han prøver at få adgang til det:

Godkendelsesgodkendelse = SecurityContextHolder.getContext (). GetAuthentication (); hvis (! (godkendelsesinstans af AnonymousAuthenticationToken)) {String currentUserName = authentication.getName (); returner nuværende Brugernavn; }

Der er selvfølgelig ulemper ved at have et statisk opkald som dette - nedsat testbarhed af koden er en af ​​de mere åbenlyse. I stedet undersøger vi alternative løsninger til dette meget almindelige krav.

3. Få brugeren til en controller

I en @Kontrol bemærket bønne, der er yderligere muligheder. Hovedmanden kan defineres direkte som et metodeargument og det løses korrekt ved hjælp af rammen:

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

Alternativt vi kan også bruge godkendelsestokenet:

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

API for Godkendelse klassen er meget åben, så rammerne forbliver så fleksible som muligt. På grund af dette, Spring Security-hovedstolen kan kun hentes som en Objekt og skal kastes til det rigtige UserDetails eksempel:

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

Og endelig direkte fra HTTP-anmodningen:

@Controller offentlig klasse GetUserWithHTTPServletRequestController {@RequestMapping (værdi = "/ brugernavn", metode = RequestMethod.GET) @ResponseBody offentlig String currentUserNameSimple (HttpServletRequest anmodning) {Principal principal = request.getUserPrincipal (); returnere principal.getName (); }}

4. Få brugeren via et brugerdefineret interface

At udnytte fjederafhængighedsinjektionen fuldt ud og være i stand til at hente godkendelsen overalt, ikke kun i @ Controller bønner, skal vi skjule den statiske adgang bag en simpel facade:

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

Facaden afslører Godkendelse objekt, mens du gemmer den statiske tilstand og holder koden afkoblet og fuldt testbar:

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

5. Få brugeren til JSP

Den aktuelt godkendte rektor kan også fås på JSP-siderved at udnytte fjedersikkerhedstaglib-understøttelsen. Først skal vi definere tagget på siden:

Dernæst kan vi henvises til hovedstolen:

 godkendt som 

6. Få brugeren til Thymeleaf

Thymeleaf er en moderne web-skabelonmotor på serversiden med god integration med Spring MVC-rammen. Lad os se, hvordan du får adgang til den aktuelt godkendte hovedstol på en side med Thymeleaf-motor.

Først skal vi tilføje thymeleaf-spring5 og thymeleaf-extras-springsecurity5 afhængigheder for at integrere Thymeleaf med Spring Security:

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

Nu vi kan henvise til hovedstolen på HTML-siden ved hjælp af sek: godkend attribut:

 Godkendt som 

7. Konklusion

Denne artikel viste, hvordan man får brugeroplysningerne i en Spring-applikation, startende med den fælles statiske adgangsmekanisme, efterfulgt af flere bedre måder at injicere rektor på.

Implementeringen af ​​disse eksempler findes i GitHub-projektet - dette er et Eclipse-baseret projekt, så det skal være let at importere og køre som det er. Når projektet kører lokalt, kan HTML-siden til hjemmesiden tilgås på:

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