Felhasználói információk lekérése a Spring Security alkalmazásban

1. Áttekintés

Ez a cikk megmutatja, hogyan kell töltse le a felhasználói adatokat a Spring Security webhelyen.

A jelenleg hitelesített felhasználó számos különféle mechanizmuson keresztül érhető el tavasszal - térjünk ki a leggyakoribb megoldásra - először az automatizált hozzáférésre.

2. Vigye a felhasználót babba

A jelenleg hitelesített megbízó lekérésének legegyszerűbb módja a SecurityContextHolder:

Hitelesítési hitelesítés = SecurityContextHolder.getContext (). GetAuthentication (); String currentPrincipalName = authentication.getName ();

Ennek a kódrészletnek a fejlesztésével először ellenőrizni kell, hogy van-e hitelesített felhasználó, mielőtt megpróbálja elérni:

Hitelesítési hitelesítés = SecurityContextHolder.getContext (). GetAuthentication (); if (! (AnonymousAuthenticationToken hitelesítési példánya)) {String currentUserName = authentication.getName (); return currentUserName; }

Az ilyen statikus hívásnak természetesen vannak hátrányai - a kód csökkent tesztelhetősége az egyik nyilvánvalóbb. Ehelyett alternatív megoldásokat fogunk feltárni erre a nagyon általános követelményre.

3. Helyezze be a felhasználót egy vezérlőbe

A @Vezérlő kommentált bab, vannak további lehetőségek. A megbízó közvetlenül meghatározható metódus argumentumként és a keretrendszer helyesen oldja meg:

@Controller public class SecurityController {@RequestMapping (value = "/ felhasználónév", method = RequestMethod.GET) @ResponseBody public String currentUserName (Fő megbízó) {return princip.getName (); }}

Alternatív megoldásként használhatjuk a hitelesítési tokent is:

@Controller public class SecurityController {@RequestMapping (value = "/ felhasználónév", method = RequestMethod.GET) @ResponseBody public String currentUserName (Hitelesítési hitelesítés) {return authentication.getName (); }}

A. API - ja Hitelesítés osztály nagyon nyitott, így a keret a lehető legrugalmasabb marad. Emiatt, a Spring Security megbízó csak mint Tárgy és helyesen kell leadni UserDetails példa:

UserDetails userDetails = (UserDetails) hitelesítés.getPrincipal (); System.out.println ("A felhasználó rendelkezik jogosultságokkal:" + userDetails.getAuthorities ());

És végül közvetlenül a HTTP kérésből:

@Controller public class GetUserWithHTTPServletRequestController {@RequestMapping (value = "/ felhasználónév", method = RequestMethod.GET) @ResponseBody public String currentUserNameSimple (HttpServletRequest request) {Principal princip = request.getUserPrincipal return basic.getName (); }}

4. Szerezze be a felhasználót egy egyedi felületen keresztül

Hogy teljes mértékben kihasználhassa a tavaszi függőségi injekciót, és képes legyen mindenhol visszakeresni a hitelesítést, nem csak bent @Controller bab, el kell rejteni a statikus hozzáférést egy egyszerű homlokzat mögött:

nyilvános felület IAuthenticationFacade {Authentication getAuthentication (); } @Component public class AuthenticationFacade valósítja meg az IAuthenticationFacade {@Orride public Authentication getAuthentication () {return SecurityContextHolder.getContext (). GetAuthentication (); }}

A homlokzat kiteszi a Hitelesítés objektumot, miközben elrejti a statikus állapotot, és a kódot leválasztva tartja és teljesen tesztelhető:

@Controller public class GetUserWithCustomInterfaceController {@Autowired private IAuthenticationFacade authenticationFacade; @RequestMapping (value = "/ felhasználónév", method = RequestMethod.GET) @ResponseBody public String currentUserNameSimple () {Hitelesítési hitelesítés = authenticationFacade.getAuthentication (); return authentication.getName (); }}

5. Szerezze be a felhasználót JSP-be

A jelenleg hitelesített megbízó JSP oldalakon is elérhető, a rugós biztonsági taglib támasz kihasználásával. Először meg kell határoznunk a címkét az oldalon:

Ezután megtehetjük utaljon az igazgatóra:

 hitelesítve 

6. Helyezze a felhasználót a Thymeleaf oldalra

A Thymeleaf egy modern, szerveroldali websablonmotor, jól integrálható a Spring MVC keretrendszerrel. Nézzük meg, hogyan férhetünk hozzá a Thymeleaf motorral ellátott oldalon az aktuálisan hitelesített főhöz.

Először hozzá kell adnunk a kakukkfű-tavasz5 és a thymeleaf-extrák-rugókbiztonság5 a Thymeleaf és a Spring Security integrálásának függőségei:

 org.thymeleaf.extras thymeleaf-extrák-springsecurity5 org.thymeleaf thymeleaf-spring5 

Most hivatkozhatunk a HTML oldalon szereplő főre a sec: engedélyez tulajdonság:

 Hitelesítve: 

7. Következtetés

Ez a cikk bemutatta, hogyan szerezhetik meg a felhasználói információkat egy Spring alkalmazásban, kezdve a közös statikus hozzáférési mechanizmussal, majd számos jobb módszerrel a tőkeinjekció beadására.

Ezeknek a példáknak a megvalósítása megtalálható a GitHub projektben - ez egy Eclipse alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie. Amikor a projekt helyi szinten fut, a honlap HTML-címe a következő címen érhető el:

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