Ako manuálne overiť používateľa pomocou jarnej bezpečnosti

1. Prehľad

V tomto rýchlom článku sa zameriame na to, ako programovo nastaviť autentifikovaného používateľa v programoch Spring Security a Spring MVC.

2. Jarná bezpečnosť

Jednoducho povedané, Spring Security uchováva základné informácie o každom overenom používateľovi v a ThreadLocal - zastúpený ako Overenie objekt.

Aby sme to mohli skonštruovať a nastaviť Overenie objekt - musíme použiť rovnaký prístup, ktorý Spring Security zvyčajne používa na zostavenie objektu na štandardnej autentifikácii.

To, poďme manuálne spustiť autentifikáciu a potom nastavte výslednú hodnotu Overenie objekt do prúdu SecurityContext rámec používa na zadržanie aktuálne prihláseného používateľa:

UsernamePasswordAuthenticationToken authReq = nové UsernamePasswordAuthenticationToken (užívateľ, heslo); Autentifikácia auth = authManager.authenticate (authReq); SecurityContext sc = SecurityContextHolder.getContext (); sc.setAuthentication (auth);

Po nastavení Overenie v tomto kontexte teraz budeme môcť skontrolovať, či je aktuálny používateľ autentifikovaný - pomocou securityContext.getAuthentication (). isAuthenticated ().

3. Jarná MVC

V predvolenom nastavení Spring Security pridáva ďalší filter do reťazca filtrov Spring Security - ktorý je schopný pretrvávať bezpečnostný kontext (SecurityContextPersistenceFilter trieda).

Na druhej strane deleguje pretrvávanie bezpečnostného kontextu na inštanciu SecurityContextRepository, predvolene HttpSessionSecurityContextRepository trieda.

Takže, aby sme nastavili autentifikáciu na požiadavku, a teda sprístupniť ho pre všetky nasledujúce požiadavky klienta, musíme ručne nastaviť SecurityContext obsahujúci Overenie v relácii HTTP:

verejné neplatné prihlásenie (požiadavka HttpServletRequest, používateľ reťazca, prístup k reťazcu) {UsernamePasswordAuthenticationToken authReq = nové UsernamePasswordAuthenticationToken (používateľ, heslo); Autentifikácia 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 staticky importovaný HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.

Je potrebné poznamenať, že nemôžeme priamo použiť HttpSessionSecurityContextRepository - pretože funguje v spojení s SecurityContextPersistenceFilter.

Je to preto, že filter používa úložisko na načítanie a uloženie kontextu zabezpečenia pred a po vykonaní zvyšku definovaných filtrov v reťazci, ale nad odpoveďou, ktorá sa odovzdá reťazcu, použije vlastný obal.

V takom prípade by ste mali poznať typ triedy použitého obalu a odovzdať ho príslušnej metóde uloženia v úložisku.

4. Záver

V tomto rýchlom výučbe sme si prešli, ako manuálne nastaviť používateľa Overenie v kontexte jarnej bezpečnosti a ako je možné ju sprístupniť na účely jarnej MVC so zameraním na ukážky kódu, ktoré ilustrujú najjednoduchší spôsob, ako to dosiahnuť.

Ako vždy, vzorky kódu nájdete na GitHub.


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