Hogyan lehet a felhasználót manuálisan hitelesíteni a tavaszi biztonsággal
1. Áttekintés
Ebben a rövid cikkben arra fogunk koncentrálni, hogy hogyan lehet programozottan beállítani egy hitelesített felhasználót a Spring Security és a Spring MVC rendszerekben.
2. Tavaszi biztonság
Egyszerűen fogalmazva, a Spring Security tárolja az egyes hitelesített felhasználók főbb adatait a ThreadLocal - mint Hitelesítés tárgy.
Ennek megszerkesztése és beállítása érdekében Hitelesítés objektum - ugyanazt a megközelítést kell használnunk, amelyet a Spring Security általában az objektum szabványos hitelesítésre épít.
To, indítsuk el manuálisan a hitelesítést, majd állítsuk be az eredményt Hitelesítés objektum az áramba SecurityContext amelyet a keretrendszer használ a jelenleg bejelentkezett felhasználó megtartására:
UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken (felhasználó, jelszó); Hitelesítés auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (hitelesítés);
Miután beállította a Hitelesítés a kontextusban most már ellenőrizhetjük, hogy a jelenlegi felhasználó hitelesítésre került-e securityContext.getAuthentication (). isAuthenticated ().
3. Tavaszi MVC
Alapértelmezés szerint a Spring Security további szűrőt ad hozzá a Spring Security szűrő láncához - amely képes fenntartani a biztonsági kontextust (SecurityContextPersistenceFilter osztály).
Viszont a biztonsági kontextus fennmaradását delegálja a SecurityContextRepository, alapértelmezés szerint a HttpSessionSecurityContextRepository osztály.
Tehát a kérelem hitelesítésének beállítása érdekében elérhetővé tegye az ügyfél minden későbbi kérése számára, manuálisan kell beállítanunk a SecurityContext tartalmazó Hitelesítés a HTTP munkamenetben:
public void login (HttpServletRequest req, String user, String pass) {UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken (user, pass); Hitelesítés auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (hitelesítés); HttpSession session = req.getSession (true); session.setAttribute (SPRING_SECURITY_CONTEXT_KEY, sc); }
SPRING_SECURITY_CONTEXT_KEY statikusan importált HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.
Meg kell jegyezni, hogy nem tudjuk közvetlenül használni a HttpSessionSecurityContextRepository - mert együtt működik a SecurityContextPersistenceFilter.
Ennek oka, hogy a szűrő az adattárat használja a biztonsági kontextus betöltésére és tárolására a lánc többi definiált szűrőjének végrehajtása előtt és után, de egy egyéni burkolót használ a válaszra, amelyet továbbítanak a láncnak.
Tehát ebben az esetben ismernie kell a használt burkoló osztálytípusát, és át kell adnia a megfelelő mentési metódusnak a lerakatban.
4. Következtetés
Ebben a gyors oktatóanyagban áttekintettük a felhasználó manuális beállítását Hitelesítés a Spring Security kontextusában, és hogyan lehet elérhetővé tenni a tavaszi MVC célokra, különös tekintettel azokra a kódmintákra, amelyek a legegyszerűbb módszert szemléltetik.
Mint mindig, a kódminták megtalálhatók a GitHubon.