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

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