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.


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