Načítajte informácie o používateľovi v jarnom zabezpečení
1. Prehľad
Tento článok ukáže, ako na to načítať údaje o užívateľovi v Spring Security.
Aktuálne overený používateľ je k dispozícii prostredníctvom rôznych mechanizmov na jar - najskôr poďme pokryť najbežnejšie riešenie - programový prístup.
2. Dostaňte používateľa do fazule
Najjednoduchší spôsob, ako získať momentálne autentifikovaného principála, je prostredníctvom statického volania na server SecurityContextHolder:
Overenie autentifikácie = SecurityContextHolder.getContext (). GetAuthentication (); Reťazec currentPrincipalName = authentication.getName ();
Vylepšenie tohto úryvku najskôr skontroluje, či existuje autentizovaný používateľ, skôr ako sa k nemu pokúsite dostať:
Overenie autentifikácie = SecurityContextHolder.getContext (). GetAuthentication (); if (! (authentication instanceof AnonymousAuthenticationToken)) {String currentUserName = authentication.getName (); vrátiť currentUserName; }
Existujú samozrejme aj nevýhody, ktoré môžu mať statické volanie, ako je tento - znížená testovateľnosť kódu je jedným z najjasnejších. Namiesto toho preskúmame alternatívne riešenia tejto veľmi bežnej požiadavky.
3. Pripojte používateľa k ovládaču
V @ Kontrolór fazuľa s poznámkami, existujú ďalšie možnosti. Principál je možné definovať priamo ako argument metódy a rámec to správne vyrieši:
@Controller verejná trieda SecurityController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserName (hlavný zodpovedný) {return principal.getName (); }}
Prípadne môžeme tiež použiť autentifikačný token:
@Controller verejná trieda SecurityController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserName (autentifikácia autentifikácia) {návrat autentifikácia.getName (); }}
API rozhrania Overenie triedy je veľmi otvorený, aby rámec zostal čo najpružnejší. Kvôli tomu, principál jarnej bezpečnosti je možné získať iba ako Objekt a je potrebné ho hodiť správnym smerom UserDetails inštancia:
UserDetails userDetails = (UserDetails) authentication.getPrincipal (); System.out.println ("Používateľ má oprávnenie:" + userDetails.getAuthorities ());
A nakoniec priamo z požiadavky HTTP:
@Controller verejná trieda GetUserWithHTTPServletRequestController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserNameSimple (požiadavka HttpServletRequest) {Principal principal = request.getUserPrincipal (); vrátiť principál.getName (); }}
4. Získajte používateľa prostredníctvom vlastného rozhrania
Aby ste naplno využili vloženie jarnej závislosti a dokázali načítať autentifikáciu všade, nielen v @Controller fazuľa, musíme skryť statický prístup za jednoduchú fasádu:
verejné rozhranie IAuthenticationFacade {Overenie getAuthentication (); } @ Komponenta verejná trieda AuthenticationFacade implementuje IAuthenticationFacade {@Override verejné overenie getAuthentication () {návrat SecurityContextHolder.getContext (). GetAuthentication (); }}
Fasáda vystavuje Overenie objekt, zatiaľ čo skrýva statický stav a udržuje kód odpojený a plne testovateľný:
@ Verejná trieda Controller GetUserWithCustomInterfaceController {@Autowired private IAuthenticationFacade authenticationFacade; @RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody public String currentUserNameSimple () {Authentication authentication = authenticationFacade.getAuthentication (); vrátiť autentizáciu.getName (); }}
5. Získajte používateľa v JSP
Aktuálne overený príkazca je prístupný aj na stránkach JSP, využitím podpory pružiny bezpečnostného taglib. Najskôr musíme na stránke definovať značku:
Ďalej môžeme odvolať sa na príkazcu:
overené ako
6. Dostaňte používateľa na Thymeleaf
Thymeleaf je moderný šablónový nástroj na strane servera s dobrou integráciou s jarným rámcom MVC. Pozrime sa, ako získať prístup k aktuálne overenému principálovi na stránke s motorom Thymeleaf.
Najprv musíme pridať thymeleaf-spring5 a thymeleaf-extras-springsecurity5 závislosti na integrácii Thymeleaf s Spring Security:
org.thymeleaf.extras thymeleaf-extras-springsecurity5 org.thymeleaf thymeleaf-spring5
Teraz môžeme sa odvolať na principála na stránke HTML pomocou sec: autorizovať atribút:
Overené ako
7. Záver
Tento článok ukázal, ako získať informácie o používateľovi v jarnej aplikácii, počnúc spoločným mechanizmom statického prístupu, po ktorých nasleduje niekoľko lepších spôsobov vloženia príkazcu.
Implementáciu týchto príkladov možno nájsť v projekte GitHub - jedná sa o projekt založený na Eclipse, takže by malo byť ľahké ho importovať a spustiť tak, ako je. Keď je projekt spustený lokálne, k domovskej stránke HTML je možné pristupovať na adrese:
// localhost: 8080 / spring-security-rest-custom / foos / 1