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