Kézi kijelentkezés tavaszi biztonsággal

1. Bemutatkozás

A Spring Security a tavaszi alkalmazások biztonságának szabványa. Számos funkcióval rendelkezik a felhasználó hitelesítésének kezelésére, beleértve a bejelentkezést és a kijelentkezést.

Ebben az oktatóanyagban a következőkre fogunk összpontosítani kézi kijelentkezés a Spring Security-vel.

Feltételezzük, hogy az olvasók már értik a tavaszi biztonsági kijelentkezés folyamatát.

2. Alapvető kijelentkezés

Mikor egy felhasználó megpróbál kijelentkezni, ennek számos következménye van az aktuális munkamenet állapotára . Két lépéssel kell megsemmisítenünk a munkamenetet:

  1. Érvénytelenítse a HTTP munkamenet adatait.
  2. Egyértelmű SecurityContext mivel hitelesítési információkat tartalmaz.

Ezt a két műveletet a SecurityContextLogoutHandler.

Lássuk ezt működés közben:

A @Configuration public class DefaultLogoutConfiguration kiterjeszti a WebSecurityConfigurerAdapter {@Orride védett érvénytelen konfigurációját (HttpSecurity http) a Kivétel {http .logout (logout -> logout .logoutUrl ("/ basic / basiclogout") .addLogoutHandler (új SecurityContext); }}

Vegye figyelembe, hogy SecurityContextLogoutHandler alapértelmezés szerint a Spring Security adja hozzá - az egyértelműség kedvéért csak megmutatjuk.

3. Cookie törlése kijelentkezés

Gyakran a kijelentkezés azt is megkívánja, hogy töröljük a felhasználó cookieinak egy részét vagy egészét.

Hozhatunk létre saját LogoutHandler amely végignézi az összes cookie-t, és kijelentkezéskor lejáratja őket:

Az @Configuration nyilvános osztály Az AllCookieClearingLogoutConfiguration kiterjeszti a WebSecurityConfigurerAdapter {@Orride védett void konfigurációját (HttpSecurity http) a Kivételt {http .logout (kijelentkezés -> logout .logoutUrl ("/ cookie-k / cookie-logout") .addLogoutHandler ( {for (Cookie cookie: request.getCookies ()) {String cookieName = cookie.getName (); Cookie cookieToDelete = new Cookie (cookieName, null); cookieToDelete.setMaxAge (0); response.addCookie (cookieToDelete);}}) ); }}

Másrészt a Spring Security biztosítja CookieClearingLogoutHandler amely használatra kész kijelentkezelő a cookie-k eltávolításához.

4. Clear-Site-Data Fejléc kijelentkezés

Alternatív megoldásként egy speciális HTTP válasz fejlécet is használhatunk ugyanez elérésére; itt van a Clear-Site-Data fejléc játékba kerül. A Clear-Data-Site fejléc törli a kérelmező webhelyhez kapcsolódó böngészési adatokat (sütik, tárhely, gyorsítótár):

A @Configuration nyilvános ClearSiteDataHeaderLogoutConfiguration osztály kiterjeszti a WebSecurityConfigurerAdapter {private static final ClearSiteDataHeaderWriter.Directive [] SOURCE = {Cache, COOKIES, STORAGE, EXECUTION_CONTEXTS}; A @Orride protected void configure (HttpSecurity http) a {http .logout (logout -> logout .logoutUrl ("/ csd / csdlogout") .addLogoutHandler (új HeaderWriterLogoutHandler (új ClearSiteDataHeaderWriter (SOURCE))) kivételt dobja; }}

Vegye figyelembe, hogy a tárolótisztítás megsértheti az alkalmazás állapotát, ha csak egy típusú tárolót törölünk. Ezért a Hiányos törlés miatt a fejléc csak akkor érvényes, ha a kérés biztonságos.

5. Következtetés

A Spring Security számos beépített funkcióval rendelkezik a hitelesítési forgatókönyvek kezeléséhez. Mindig jól jön, ha elsajátítja, hogyan kell ezeket a funkciókat programozottan használni.

Mint mindig, ezeknek a példáknak a kódja elérhető a GitHub oldalon.