Úvod do jarných bezpečnostných výrazov

1. Úvod

V tomto tutoriáli sa zameriame na jarné bezpečnostné výrazy a samozrejme na praktické príklady týchto výrazov.

Predtým, ako sa pozrieme na zložitejšie implementácie (napríklad ACL), je dôležité dôkladne porozumieť bezpečnostným výrazom - pretože pri správnom použití môžu byť dosť flexibilné a výkonné.

Tento článok je rozšírením jarných bezpečnostných výrazov - príklad hasRole.

2. Maven závislosti

Aby ste mohli používať Spring Security, musíte do svojho súboru zahrnúť nasledujúcu časť pom.xml spis:

  org.springframework.security spring-security-web 5.2.3.RELEASE 

Najnovšiu verziu nájdete tu.

A krátka poznámka - táto závislosť sa týka iba jarnej bezpečnosti; nezabudni pridať spring-core a jarný kontext pre úplnú webovú aplikáciu.

3. Konfigurácia

Najskôr sa pozrime na konfiguráciu Java.

Predĺžime WebSecurityConfigurerAdapter - aby sme mali možnosť pripojiť sa k niektorému z rozširujúcich bodov, ktoré ponúka základná trieda:

@Configuration @EnableAutoConfiguration @EnableWebSecurity @EnableGlobalMethodSecurity (prePostEnabled = true) verejná trieda SecurityJavaConfig rozširuje WebSecurityConfigurerAdapter {...}

Môžeme samozrejme urobiť aj konfiguráciu XML:

4. Výrazy zabezpečenia webu

Teraz sa pozrime na bezpečnostné výrazy:

  • hasRole, hasAnyRole
  • hasAuthority, hasAnyAuthority
  • povolenieAll, popierať všetko
  • je anonymný, isRememberMe, isAuthenticated, isFullyAuthenticated
  • principál, Overenie
  • máPovolenie

A poďme si teraz podrobne prečítať každú z nich.

4.1. hasRole, hasAnyRole

Tieto výrazy sú zodpovedné za definovanie riadenia prístupu alebo autorizácie konkrétnych adries URL alebo metód vo vašej aplikácii.

Pozrime sa na príklad:

@Override protected void configure (konečná HttpSecurity http) vyvolá výnimku {... .antMatchers ("/ auth / admin / *"). HasRole ("ADMIN") .antMatchers ("/ auth / *"). HasAnyRole ("ADMIN" "," USER ") ...} 

V tomto príklade špecifikujeme prístup ku všetkým odkazom začínajúcim na / auth / obmedzené na používateľov, ktorí sú prihlásení pomocou roly UŽÍVATEĽ alebo rola SPRÁVCA. Navyše, na prístup k odkazom začínajúcim na / auth / admin / potrebujeme mať SPRÁVCA úlohu v systéme.

Rovnakú konfiguráciu je možné dosiahnuť v súbore XML napísaním:

4.2. hasAuthority, hasAnyAuthority

Úlohy a právomoci sú podobné na jar.

Hlavný rozdiel je v tom, že role majú špeciálnu sémantiku - počnúc Spring Security 4, „ROLE_„Predpona je automaticky pridaná (ak tam ešte nie je) akoukoľvek metódou súvisiacou s rolou.

Takže hasAuthority („ROLE_ADMIN“) je podobný hasRole („ADMIN“) pretože 'ROLE_„Predpona sa pridá automaticky.

Ale dobrá vec pri používaní orgánov je, že nemusíme používať ROLE_ prefix vôbec.

Tu je rýchly príklad, kde definujeme používateľov s konkrétnymi autoritami:

@Override protected void configure (AuthenticationManagerBuilder auth) hodí výnimku {auth.inMemoryAuthentication () .withUser ("user1"). Heslo (encoder (). Encode ("user1Pass")) .authorities ("USER") .and (). withUser ("admin"). heslo (encoder (). encode ("adminPass")) .authorities ("ADMIN"); } 

Potom môžeme samozrejme použiť tieto autoritné výrazy:

@Override protected void configure (konečná HttpSecurity http) vyvolá výnimku {... .antMatchers ("/ auth / admin / *"). HasAuthority ("ADMIN") .antMatchers ("/ auth / *"). HasAnyAuthority ("ADMIN" "," USER ") ...}

Ako vidíme - tu sa vôbec nezmieňujeme o rolách. Od jari 5 navyše potrebujeme a PasswordEncoder fazuľa:

@Bean public PasswordEncoder passwordEncoder () {vrátiť nový BCryptPasswordEncoder (); }

Nakoniec - rovnakú funkcionalitu môžeme samozrejme dosiahnuť aj pomocou konfigurácie XML:

A:

4.3. allowAll, denyAll

Tieto dve anotácie sú tiež celkom priame. Buď môžeme povoliť prístup na niektoré adresy URL v našej službe, alebo môžeme prístup odmietnuť.

Pozrime sa na príklad:

... .antMatchers ("/ *"). permitAll () ...

Vďaka tejto konfigurácii autorizujeme všetkých používateľov (anonymných aj prihlásených) na prístup na stránku začínajúcu na „/“ (napríklad na našu domovskú stránku).

Môžeme tiež odmietnuť prístup k celému nášmu priestoru URL:

... .antMatchers ("/ *"). denyAll () ...

Rovnakú konfiguráciu je možné vykonať aj v konfigurácii XML:

4.4. isAnonymous, isRememberMe, isAuthenticated, isFullyAuthenticated

V tejto podkapitole sa zameriavame na výrazy súvisiace so stavom prihlásenia používateľa. Začnime s používateľom, ktorý sa neprihlásil na našu stránku. Zadaním nasledujúcich údajov v konfigurácii Java umožňujeme všetkým neoprávneným používateľom prístup na našu hlavnú stránku:

... .antMatchers ("/ *"). anonymous () ...

To isté v konfigurácii XML:

Ak chceme zabezpečiť webovú stránku, ktorú bude musieť každý, kto ju používa, prihlásiť sa, musíme ju použiť isAuthenticated () metóda:

... .antMatchers ("/ *"). authenticated () ...

alebo XML verzia:

Okrem toho máme dva ďalšie výrazy, isRememberMe () a isFullyAuthenticated (). Vďaka použitiu cookies umožňuje Spring funkcie zapamätania si, takže nie je potrebné sa zakaždým prihlasovať do systému. Môžete si prečítať viac o Pamätáš si ma tu.

Na umožnenie prístupu používateľom, ktorí boli prihlásení iba funkciou zapamätať si, môžeme použiť toto:

... .antMatchers ("/ *"). rememberMe () ...

alebo XML verzia:

Niektoré časti našich služieb nakoniec vyžadujú, aby bol používateľ znova autentizovaný, aj keď je už prihlásený. Napríklad chce používateľ zmeniť nastavenia alebo platobné údaje; osvedčeným postupom je samozrejme požiadať o manuálne overenie totožnosti v citlivejších oblastiach systému.

Za týmto účelom môžeme spresniť isFullyAuthenticated (), ktorý sa vracia pravda ak používateľ nie je anonymný alebo si ho pamätajte:

... .antMatchers ("/ *"). fullyAuthenticated () ...

alebo verzia XML:

4.5. principál, autentifikácia

Tieto výrazy umožňujú prístup k principál objekt predstavujúci aktuálneho autorizovaného (alebo anonymného) používateľa a aktuálneho Overenie objekt z SecurityContext, resp.

Môžeme napríklad použiť principál načítať e-mail, avatar alebo akékoľvek ďalšie údaje, ktoré sú prístupné prihlásenému používateľovi.

A Overenie poskytuje informácie o úplnom znení Overenie spolu s udelenými orgánmi.

Obidve sú podrobnejšie popísané v nasledujúcom článku: Načítanie informácií o používateľovi v jarnom zabezpečení.

4.6. máPovolenie API

Tento výraz je zdokumentovaný a je určený na premostenie medzi expresným systémom a systémom ACL spoločnosti Spring Security, čo nám umožňuje určiť autorizačné obmedzenia pre jednotlivé doménové objekty na základe abstraktných povolení.

Pozrime sa na príklad. Máme službu, ktorá umožňuje spoločné písanie článkov a hlavný editor rozhoduje o tom, ktorý článok navrhnutý inými autormi by mal byť publikovaný.

Aby sme umožnili použitie takejto služby, môžeme vytvoriť nasledujúce metódy s metódami riadenia prístupu:

@PreAuthorize ("hasPermission (#articleId, 'isEditor')") public void acceptArticle (článok článku) {…}

Túto metódu môže volať iba oprávnený používateľ a tiež používateľ musí mať povolenie isEditor v službe.

Musíme si tiež pamätať, aby ste explicitne nakonfigurovali a Hodnotiteľ povolení v našom kontexte aplikácie:

kde customInterfaceImplementation bude trieda, ktorá implementuje Hodnotiteľ povolení.

Samozrejme to môžeme urobiť aj s konfiguráciou Java:

@Override chránený MethodSecurityExpressionHandler expressionHandler () {DefaultMethodSecurityExpressionHandler expressionHandler = nový DefaultMethodSecurityExpressionHandler (); expressionHandler.setPermissionEvaluator (nový CustomInterfaceImplementation ()); návrat výrazHandler; }

5. Záver

Tento tutoriál predstavuje komplexný úvod a sprievodcu jarnými bezpečnostnými výrazmi.

Všetky tu diskutované príklady sú k dispozícii v projekte GitHub.


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