Bevezetés a tavaszi biztonsági kifejezésekbe

1. Bemutatkozás

Ebben az oktatóanyagban a tavaszi biztonsági kifejezésekre összpontosítunk, és természetesen a kifejezések gyakorlati példáira.

A bonyolultabb megvalósítások (például az ACL) áttekintése előtt fontos, hogy alaposan átfogja a biztonsági kifejezéseket - mivel megfelelő használat esetén meglehetősen rugalmasak és hatékonyak lehetnek.

Ez a cikk a Spring Security Expressions - hasRole Example kiterjesztése.

2. Maven-függőségek

A Spring Security használatához be kell illesztenie a következő szakaszt a pom.xml fájl:

  org.springframework.security spring-security-web 5.2.3.KÖZLEMÉNY 

A legfrissebb verzió itt található.

És egy rövid megjegyzés: ez a függőség csak a Spring Securityre terjed ki; ne felejts el hozzáadni s-tpring-core és tavaszi kontextus egy teljes webes alkalmazáshoz.

3. Konfiguráció

Először vessünk egy pillantást egy Java konfigurációra.

Meghosszabbítjuk WebSecurityConfigurerAdapter - hogy lehetőségünk legyen az alaposztály bármelyik kiterjesztési pontjára bekapcsolni:

@Configuration @EnableAutoConfiguration @EnableWebSecurity @EnableGlobalMethodSecurity (prePostEnabled = true) nyilvános osztály A SecurityJavaConfig kiterjeszti a WebSecurityConfigurerAdapter {...}

Természetesen elvégezhetünk egy XML konfigurációt is:

4. Webbiztonsági kifejezések

Most kezdjük el megvizsgálni a biztonsági kifejezéseket:

  • hasRole, hasAnyRole
  • hasAuthority, hasAnyAuthority
  • allowAll, denyAll
  • isAnonymous, isRememberMe, isHitelesítve, isFullyAuthentified
  • , hitelesítés
  • hasPermission

És most nézzük át ezeket részletesen.

4.1. hasRole, hasAnyRole

Ezek a kifejezések felelősek az alkalmazás URL-jeinek vagy módszereinek hozzáférés-felügyeletének vagy engedélyezésének meghatározásáért.

Nézzük meg a példát:

A @Orride védett void konfiguráció (végső HttpSecurity http) a Kivételt dobja ... {antantMatchers ("/ auth / admin / *"). HasRole ("ADMIN") .antMatchers ("/ auth / *"). "," USER ") ...} 

Ebben a példában megadjuk a hozzáférést az összes kezdő linkhez / auth / azokra a felhasználókra korlátozódik, akik szerepkörrel vannak bejelentkezve FELHASZNÁLÓ vagy szerep ADMIN. Sőt, a kezdő linkek eléréséhez / auth / admin / nekünk kell ADMIN szerepe a rendszerben.

Ugyanez a konfiguráció elérhető az XML fájlban, a következő írásával:

4.2. hasAuthority, hasAnyAuthority

A szerepek és a hatóságok hasonlóak tavasszal.

A fő különbség az, hogy a szerepeknek különleges szemantikájuk van - kezdve a Spring Security 4-től, aSZEREP_‘Az előtagot automatikusan hozzáadja (ha még nincs ott) bármely szerepkörrel kapcsolatos módszer.

Így hasAuthority (‘ROLE_ADMIN’) hasonló hasRole (’ADMIN’) mert a 'SZEREP_‘Az előtag automatikusan hozzáadódik.

De az a jó a hatóságok használatában, hogy nem kell használnunk a SZEREP_ előtag egyáltalán.

Itt egy rövid példa, ahol meghatározzuk a felhasználókat meghatározott jogosultságokkal:

A @Orride védett érvénytelen konfiguráció (AuthenticationManagerBuilder withUser ("admin"). jelszó (encoder (). encode ("adminPass")) .authorities ("ADMIN"); } 

Ezután természetesen használhatjuk ezeket a hatósági kifejezéseket:

A @Orride védett void konfiguráció (végső HttpSecurity http) dobja a kivételt {... .antMatchers ("/ auth / admin / *"). HasAuthority ("ADMIN") .antMatchers ("/ auth / *"). HasAnyAuthority ("ADMIN "," USER ") ...}

Mint láthatjuk - itt egyáltalán nem említünk szerepeket. Emellett az 5. tavasztól szükségünk van a PasswordEncoder bab:

@Bean public PasswordEncoder passwordEncoder () {return new BCryptPasswordEncoder (); }

Végül - természetesen ugyanazt a funkciót is elérhetjük az XML konfigurációval:

És:

4.3. allowAll, denyAll

Ez a két kommentár is elég egyértelmű. Vagy engedélyezhetjük a szolgáltatásunk URL-jéhez való hozzáférést, vagy megtagadhatjuk a hozzáférést.

Vessünk egy pillantást a példára:

... .antMatchers ("/ *"). allowAll () ...

Ezzel a konfigurációval minden felhasználót (mind névtelen, mind bejelentkezett felhasználót) felhatalmazunk a '/' betűvel kezdődő oldal (például a kezdőlapunk) elérésére.

Megtagadhatjuk a teljes URL-területünkhöz való hozzáférést is:

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

Ismét ugyanaz a konfiguráció elvégezhető egy XML konfigurációval is:

4.4. isAnonymous, isRememberMe, isAuthenticated, isFullyAuthenticated

Ebben az alfejezetben a felhasználó bejelentkezési állapotához kapcsolódó kifejezésekre összpontosítunk. Kezdjük azzal a felhasználóval, aki nem jelentkezett be az oldalunkra. Az alábbiak megadásával a Java config-ban minden jogosulatlan felhasználó számára lehetővé tesszük a főoldalunk elérését:

... .antMatchers ("/ *"). névtelen () ...

Ugyanez az XML konfigurációban:

Ha meg akarjuk védeni azt a weboldalt, amelybe mindenkinek be kell jelentkeznie, aki használja, akkor azt be kell használnunk isAuthentified () módszer:

... .antMatchers ("/ *"). hitelesítve () ...

vagy XML verzió:

Sőt, van két további kifejezésünk, isRememberMe () és isFullyAuthenticated (). A sütik használatával a Spring lehetővé teszi az emlékszem képességeit, így nem kell minden alkalommal bejelentkezni a rendszerbe. Tudjon meg többet erről Emlékezz rám itt.

Annak érdekében, hogy hozzáférést biztosítsunk azoknak a felhasználóknak, akiket csak az Emlékezzen rám funkció lépett be, használhatjuk ezt:

... .antMatchers ("/ *"). RememberMe () ...

vagy XML verzió:

Végül, szolgáltatásaink bizonyos részei megkövetelik a felhasználó újbóli hitelesítését, még akkor is, ha a felhasználó már be van jelentkezve. Például a felhasználó módosítani szeretné a beállításokat vagy a fizetési információkat; természetesen jó gyakorlat kézi hitelesítést kérni a rendszer érzékenyebb területein.

Ennek érdekében meghatározhatjuk isFullyAuthenticated (), amely visszatér igaz ha a felhasználó nem névtelen vagy emlékszik rám:

... .antMatchers ("/ *"). teljesen hitelesítve () ...

vagy az XML verzió:

4.5. megbízó, hitelesítés

Ezek a kifejezések lehetővé teszik a az aktuálisan engedélyezett (vagy névtelen) felhasználót és az aktuális felhasználót képviselő objektum Hitelesítés objektum a SecurityContextill.

Használhatjuk például a felhasználó e-mailjének, avatárjának vagy bármely más adatnak a betöltéséhez, amely elérhető a bejelentkezett felhasználóban.

És hitelesítés információt nyújt a teljes Hitelesítés objektumot, annak meghatalmazottjaival együtt.

Mindkettőt részletesebben ismerteti a következő cikk: Felhasználói információk letöltése a Spring Security alkalmazásban.

4.6. hasPermission API-k

Ezt a kifejezést dokumentálják, és célja az, hogy áthidalja az expressziós rendszert és a Spring Security ACL rendszerét, lehetővé téve számunkra, hogy absztrakt engedélyek alapján meghatározzuk az egyes tartományi objektumok engedélyezési korlátozásait.

Nézzünk meg egy példát. Van egy szolgáltatásunk, amely lehetővé teszi a kooperatív cikkek írását, főszerkesztővel, eldöntve, hogy a többi szerző által javasolt cikket melyiknek kellene közzétenni.

Az ilyen szolgáltatás használatának engedélyezése érdekében a következő módszereket hozhatjuk létre hozzáférés-vezérlési módszerekkel:

@PreAuthorize ("hasPermission (#articleId, 'isEditor')") public void acceptArticle (cikkcikk) {…}

Csak a jogosult felhasználó hívhatja meg ezt a módszert, és a felhasználónak is engedélyre van szüksége isEditor a szolgálatban.

Arra is emlékeznünk kell, hogy kifejezetten konfiguráljuk a PermissionEvaluator pályázati környezetünkben:

hol customInterfaceImplementation osztály lesz, amely megvalósítja PermissionEvaluator.

Természetesen ezt Java konfigurációval is megtehetjük:

@Orride protected MethodSecurityExpressionHandler expressionHandler () {DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler (); kifejezésHandler.setPermissionEvaluator (új CustomInterfaceImplementation ()); return kifejezésHandler; }

5. Következtetés

Ez az oktatóanyag a Spring Security Expressions átfogó bemutatása és útmutatója.

Az itt tárgyalt összes példa elérhető a GitHub projektről.