Manuell utlogging med vårsikkerhet

1. Introduksjon

Spring Security er standarden for å sikre vårbaserte applikasjoner. Den har flere funksjoner for å administrere brukerens autentisering, inkludert pålogging og avlogging.

I denne opplæringen vil vi fokusere på manuell avlogging med Spring Security.

Vi vil anta at leserne allerede forstår standard Spring Security-loggprosessen.

2. Grunnleggende avlogging

Når en bruker prøver å logge av, det har flere konsekvenser for sin nåværende økttilstand . Vi må ødelegge økten med to trinn:

  1. Ugyldig informasjon om HTTP-økt.
  2. Klar SecurityContext da den inneholder autentiseringsinformasjon.

Disse to handlingene utføres av SecurityContextLogoutHandler.

La oss se det i aksjon:

@Configuration offentlig klasse DefaultLogoutConfiguration utvider WebSecurityConfigurerAdapter {@Override-beskyttet tomkonfigurasjon (HttpSecurity http) kaster Unntak {http .logout (logout -> logout .logoutUrl ("/ basic / basiclogout") .addLogoutHandler (new SecurityContextLogoutH }}

Noter det SecurityContextLogoutHandler er lagt til av Spring Security som standard - vi viser det bare her for klarhet.

3. Logg ut avlogging

Ofte krever en avlogging oss også å tømme noen eller alle brukerens informasjonskapsler.

Vi kan lage våre egne LogoutHandler som går gjennom alle informasjonskapsler og utløper dem ved avlogging:

@Configuration offentlig klasse AllCookieClearingLogoutConfiguration utvider WebSecurityConfigurerAdapter {@Override-beskyttet ugyldig konfigurering (HttpSecurity http) kaster Unntak {http .logout (logout -> logout .logoutUrl ("/ cookies / cookielogout") .addLogoutHandler ((request - response,) - response) {for (Cookie cookie: request.getCookies ()) {String cookieName = cookie.getName (); Cookie cookieToDelete = new Cookie (cookieName, null); cookieToDelete.setMaxAge (0); response.addCookie (cookieToDelete);}}) ); }}

På den annen side gir Spring Security CookieClearingLogoutHandler som er en klar til bruk avloggingshåndterer for fjerning av informasjonskapsler.

4. Clear-Site-Data Topptekstavlogging

Alternativt kan vi bruke en spesiell HTTP-svarhode for å oppnå det samme; det er her Clear-Site-Data Overskrift kommer inn i bildet. De Clear-Data-Site header tømmer nettleserdata (informasjonskapsler, lagring, cache) tilknyttet det forespurte nettstedet:

@Configuration offentlig klasse ClearSiteDataHeaderLogoutConfiguration utvider WebSecurityConfigurerAdapter {privat statisk slutt ClearSiteDataHeaderWriter.Directive [] SOURCE = {CACHE, COOKIES, STORAGE, EXECUTION_CONTEXTS}; @ Override beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster Unntak {http .logout (logout -> logout .logoutUrl ("/ csd / csdlogout") .addLogoutHandler (new HeaderWriterLogoutHandler (new ClearSiteDataHeaderWriter (SOURCE))))); }}

Merk at rensing av lagring kan ødelegge applikasjonstilstanden når vi bare tømmer én type lagring. Derfor, på grunn av ufullstendig rydding, brukes overskriften bare hvis forespørselen er sikker.

5. Konklusjon

Spring Security har mange innebygde funksjoner for å håndtere autentiseringsscenarier. Det kommer alltid godt med å mestre hvordan du bruker disse funksjonene programmatisk.

Som alltid er koden for disse eksemplene tilgjengelig på GitHub.


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