Kako ručno provjeriti autentičnost korisnika pomoću Spring Securitya

1. Pregled

U ovom ćemo se kratkom članku usredotočiti na to kako programski postaviti autentificiranog korisnika u Spring Security i Spring MVC.

2. Proljetna sigurnost

Jednostavno rečeno, Spring Security sadrži glavne podatke svakog ovjerenog korisnika u a ThreadLocal - predstavljen kao Ovjera objekt.

Da bi se ovo konstruiralo i postavilo Ovjera objekt - trebamo koristiti isti pristup koji Spring Security obično koristi za izgradnju objekta na standardnoj autentifikaciji.

Da, pokrenimo ručno provjeru autentičnosti, a zatim postavimo rezultirajuće Ovjera objekt u struju SecurityContext koristi okvir za držanje trenutno prijavljenog korisnika:

UsernamePasswordAuthenticationToken authReq = novo UsernamePasswordAuthenticationToken (korisnik, prolaz); Autentifikacija auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth);

Nakon postavljanja Ovjera u kontekstu ćemo sada moći provjeriti je li trenutni korisnik autentificiran - pomoću securityContext.getAuthentication (). isAuthenticated ().

3. Proljetni MVC

Prema zadanim postavkama, Spring Security dodaje dodatni filtar u lanac filtara Spring Security - koji je sposoban zadržati sigurnosni kontekst (SecurityContextPersistenceFilter razred).

Zauzvrat, delegira postojanost sigurnosnog konteksta na instanci Spremište SecurityContextRepository, prema zadanim postavkama HttpSessionSecurityContextRepository razred.

Dakle, da bi se postavila provjera autentičnosti na zahtjev i stoga, učiniti dostupnim za sve naredne zahtjeve klijenta, moramo ručno postaviti SecurityContext koji sadrže Ovjera u HTTP sesiji:

javna nevažeća prijava (zahtjev za HttpServletRequest, korisnik niza, prolaz niza) {UsernamePasswordAuthenticationToken authReq = novo UsernamePasswordAuthenticationToken (korisnik, prolazak); Autentifikacija auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth); HttpSession session = req.getSession (true); session.setAttribute (SPRING_SECURITY_CONTEXT_KEY, sc); }

SPRING_SECURITY_CONTEXT_KEY je statički uvezena HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.

Treba napomenuti da ne možemo izravno koristiti HttpSessionSecurityContextRepository - jer radi zajedno s SecurityContextPersistenceFilter.

To je zato što filtar koristi spremište za učitavanje i spremanje sigurnosnog konteksta prije i nakon izvršavanja ostatka definiranih filtara u lancu, ali koristi prilagođeni omot preko odgovora koji se prosljeđuje lancu.

Dakle, u ovom biste slučaju trebali znati vrstu klase omota koji se koristi i proslijediti ga odgovarajućoj metodi spremanja u spremištu.

4. Zaključak

U ovom smo brzom vodiču prešli na način ručnog postavljanja korisnika Ovjera u kontekstu Spring Security i kako može biti dostupan za potrebe Spring MVC, usredotočujući se na uzorke koda koji ilustriraju najjednostavniji način da se to postigne.

Kao i uvijek, uzorci koda mogu se naći na GitHubu.


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