Dohvatite informacije o korisniku u Spring Security

1. Pregled

Ovaj će članak pokazati kako dohvatiti podatke o korisniku u Spring Security.

Trenutno ovjereni korisnik dostupan je putem niza različitih mehanizama u proljeće - hajde da prvo pokrijemo najčešće rješenje - programski pristup.

2. Dovedite korisnika u grah

Najjednostavniji način za dohvaćanje trenutno ovjerenog principala je putem statičkog poziva na SecurityContextHolder:

Provjera autentičnosti = SecurityContextHolder.getContext (). GetAuthentication (); Niz currentPrincipalName = authentication.getName ();

Poboljšanje ovog isječka prvo provjerava postoji li provjereni korisnik prije pokušaja pristupa:

Provjera autentičnosti = SecurityContextHolder.getContext (). GetAuthentication (); if (! (instance autentifikacije AnonymousAuthenticationToken)) {String currentUserName = authentication.getName (); vratiti currentUserName; }

Imati su negativne strane kod ovakvog statičnog poziva - smanjena provjerljivost koda koja je jedna od najočitijih. Umjesto toga, istražit ćemo alternativna rješenja za ovaj vrlo uobičajeni zahtjev.

3. Dovedite korisnika u kontroler

U @Controller anotirani grah, postoje dodatne mogućnosti. Ravnatelj se može izravno definirati kao argument metode i to će ispravno riješiti okvir:

@Controller javna klasa SecurityController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody javni niz currentUserName (Principal principal) {return principal.getName (); }}

Alternativno, možemo koristiti i token za provjeru autentičnosti:

@Controller javna klasa SecurityController {@RequestMapping (value = "/ username", method = RequestMethod.GET) @ResponseBody javni niz currentUserName (autentifikacija autentifikacije) {return authentication.getName (); }}

API za Ovjera klasa je vrlo otvorena, tako da okvir ostaje što fleksibilniji. Zbog ovoga, načelnik Spring Security može se dobiti samo kao Objekt i treba ga baciti na ispravan Pojedinosti o korisniku primjer:

UserDetails userDetails = (UserDetails) authentication.getPrincipal (); System.out.println ("Korisnik ima ovlaštenja:" + userDetails.getAuthorities ());

I na kraju, izravno iz HTTP zahtjeva:

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

4. Dođite do korisnika putem prilagođenog sučelja

Da biste u potpunosti iskoristili ubrizgavanje ovisnosti Spring i mogli dohvatiti provjeru autentičnosti svugdje, ne samo unutra @Controller grah, moramo sakriti statički pristup iza jednostavne fasade:

javno sučelje IAuthenticationFacade {Authentication getAuthentication (); } @Component javna klasa AuthenticationFacade implementira IAuthenticationFacade {@Override public Authentication getAuthentication () {return SecurityContextHolder.getContext (). GetAuthentication (); }}

Fasada izlaže Ovjera objekt dok skriva statičko stanje i zadržava kôd nevezan i potpuno testiran:

@Controller javna klasa GetUserWithCustomInterfaceController {@Autowired private IAuthenticationFacade authenticationFacade; @RequestMapping (value = "/ korisničko ime", method = RequestMethod.GET) @ResponseBody public String currentUserNameSimple () {Authentication authentication = authenticationFacade.getAuthentication (); vratiti autentifikaciju.getName (); }}

5. Dovedite korisnika u JSP

Trenutačno ovjereni nalogodavac može se pristupiti i na JSP stranicama, iskorištavanjem potpore proljetnom sigurnosnom taglibu. Prvo, moramo definirati oznaku na stranici:

Dalje, možemo odnose se na ravnatelja:

 ovjeren kao 

6. Dovedite korisnika u Thymeleaf

Thymeleaf je moderan web web predložak na strani poslužitelja, s dobrom integracijom s Spring MVC okvirom. Pogledajmo kako pristupiti trenutno ovjerenom naručitelju na stranici s Thymeleaf engineom.

Prvo, moramo dodati majčina dušica-proljeće5 i majčina dušica-dodaci-proljećna sigurnost5 ovisnosti za integraciju Thymeleaf-a s Spring Security-om:

 org.thymeleaf.extras majčina dušica-dodaci-proljećesecurity5 org.thymeleaf majčina dušica-proljeće5 

Sada možemo se pozvati na ravnatelja na HTML stranici pomoću sec: autorizirati atribut:

 Ovjeren kao 

7. Zaključak

Ovaj je članak pokazao kako doći do korisničkih podataka u Spring aplikaciji, počevši od uobičajenog statičkog mehanizma pristupa, praćenog nekoliko boljih načina ubrizgavanja glavnice.

Implementacija ovih primjera može se naći u projektu GitHub - ovo je projekt zasnovan na Eclipseu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest. Kada se projekt izvodi lokalno, HTML-u početne stranice može se pristupiti na:

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

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