Jarná bezpečnosť: Skontrolujte, či má používateľ úlohu v prostredí Java

1. Úvod

V rámci jarnej bezpečnosti je niekedy potrebné skontrolovať, či má autentifikovaný užívateľ konkrétnu rolu. To môže byť užitočné pri povolení alebo zakázaní konkrétnych funkcií v našich aplikáciách.

V tomto výučbe sa dozvieme rôzne spôsoby kontroly rolí používateľov v prostredí Java pre jarné zabezpečenie.

2. Kontrola roly používateľa v prostredí Java

Spring Security poskytuje niekoľko spôsobov kontroly rolí používateľov v kóde Java. Na každú z nich sa pozrieme nižšie.

2.1. @PreAuthorize

Prvým spôsobom, ako skontrolovať roly používateľov v prostredí Java, je použitie súboru @PreAuthorize anotácia poskytnutá Spring Security. Túto anotáciu je možné použiť na triedu alebo metódu a prijíma jednu hodnotu reťazca, ktorá predstavuje výraz SpEL.

Predtým, ako budeme môcť použiť túto anotáciu, musíme najskôr povoliť zabezpečenie globálnej metódy. To je možné vykonať v kóde Java pridaním súboru @EnableGlobalMethodSecurity anotácia k akejkoľvek konfiguračnej triede.

Potom Spring Security poskytuje dva výrazy, ktoré môžeme použiť s @PreAuthorize anotácia na kontrolu rolí používateľov:

@PreAuthorize ("hasRole ('ROLE_ADMIN')") @GetMapping ("/ user / {id}") verejný reťazec getUser (@PathVariable ("id") reťazec) {...}

Môžeme tiež skontrolovať viac rolí v jednom výraze:

@PreAuthorize ("hasAnyRole ('ROLE_ADMIN', 'ROLE_MANAGER')") @GetMapping ("/ users") verejný reťazec getUsers () {...}

V takom prípade bude žiadosť povolená, ak to používateľ má akýkoľvek uvedených rolí.

Ak sa metóda volá bez toho, aby mala správnu rolu, Spring Security vyvolá výnimku a presmeruje na chybovú stránku.

2.2. SecurityContext

Ďalším spôsobom, ako môžeme skontrolovať roly používateľov v kóde Java, je kód SecurityContext trieda.

V predvolenom nastavení Spring Security používa lokálnu kópiu tejto triedy pre vlákno. To znamená každá požiadavka v našej aplikácii má svoj bezpečnostný kontext, ktorý obsahuje podrobnosti o používateľovi, ktorý podáva žiadosť.

Ak ho chcete použiť, jednoducho zavoláme statické metódy v SecurityContextHolder:

Autentifikácia auth = SecurityContextHolder.getContext (). GetAuthentication (); if (auth! = null && auth.getAuthorities (). stream (). anyMatch (a -> a.getAuthority (). equals ("ADMIN"))) {...}

Upozorňujeme, že namiesto celého názvu roly tu používame obyčajný názov orgánu.

To funguje dobre, keď potrebujeme podrobnejšie kontroly - napríklad konkrétnu časť jednej metódy. Avšak tento prístup nebude fungovať, ak v Spring Security použijeme režim globálneho držiteľa kontextu.

2.3. UserDetailsService

Tretím spôsobom, ako môžeme vyhľadať roly používateľov v kóde Java, je použitie súboru UserDetailsService. Túto fazuľu môžeme vpichnúť kdekoľvek do našej aplikácie a nazvať ju podľa potreby:

@GetMapping ("/ users") public String getUsers () {UserDetails details = userDetailsService.loadUserByUsername ("mike"); if (details! = null && details.getAuthorities (). stream () .anyMatch (a -> a.getAuthority (). equals ("ADMIN"))) {// ...}}

Opäť tu musíme použiť názov orgánu, nie celý názov role s predponou.

Výhodou tohto prístupu je, že môžeme skontrolovať roly pre každého používateľa, nielen toho, kto podal žiadosť.

2.4. Žiadosť o servlet

Ak používame Spring MVC, môžeme tiež skontrolovať užívateľské roly v Jave pomocou HttpServletRequest trieda:

@GetMapping ("/ users") public String getUsers (požiadavka HttpServletRequest) {if (request.isUserInRole ("ROLE_ADMIN")) {...}}

3. Záver

V tomto článku sme videli niekoľko rôznych spôsobov kontroly rolí pomocou kódu Java s funkciou Spring Security.

Ako vždy, príklady kódov z tohto článku nájdete na GitHub.


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