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