Manuel aflogning med forårssikkerhed

1. Introduktion

Spring Security er standarden til sikring af Spring-baserede applikationer. Det har flere funktioner til at styre brugerens godkendelse, herunder login og logout.

I denne vejledning fokuserer vi på manuel logout med Spring Security.

Vi antager, at læsere allerede forstår standard Spring Security logout-processen.

2. Grundlæggende logout

Hvornår en bruger forsøger at logge ud, det har flere konsekvenser for den aktuelle sessionstilstand . Vi har brug for at ødelægge sessionen med to trin:

  1. Ugyldig information om HTTP-session.
  2. Klar Sikkerhedskontekst da den indeholder godkendelsesoplysninger.

Disse to handlinger udføres af SecurityContextLogoutHandler.

Lad os se det i aktion:

@Configuration offentlig klasse DefaultLogoutConfiguration udvider WebSecurityConfigurerAdapter {@Override beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http .logout (logout -> logout .logoutUrl ("/ basic / basiclogout") .addLogoutHandler (new SecurityContextLogoutHand) }}

Noter det SecurityContextLogoutHandler er tilføjet af Spring Security som standard - vi viser det bare her for klarhedens skyld.

3. Cookie Clearing Logout

Ofte kræver en logout også, at vi rydder nogle eller alle brugerens cookies.

Vi kan skabe vores egne LogoutHandler der løber gennem alle cookies og udløber dem ved logout:

@Configuration offentlig klasse AllCookieClearingLogoutConfiguration udvider WebSecurityConfigurerAdapter {@Override-beskyttet ugyldig konfiguration (HttpSecurity http) kaster Undtagelse {http .logout (logout -> logout .logoutUrl ("/ cookies / cookielogout") .addLogoutHandler ((anmodning, svar), svar) {for (Cookie cookie: request.getCookies ()) {String cookieName = cookie.getName (); Cookie cookieToDelete = ny cookie (cookienavn, null); cookieToDelete.setMaxAge (0); respons.addCookie (cookieToDelete);}}) ); }}

På den anden side giver Spring Security CookieClearingLogoutHandler som er en klar til brug afloghåndterer til fjernelse af cookies.

4. Clear-Site-Data Overskriftslogout

Alternativt kan vi bruge en speciel HTTP-svaroverskrift til at opnå det samme; det er her, Clear-Site-Data header kommer i spil. Det Clear-Data-Site header rydder browserdata (cookies, opbevaring, cache) tilknyttet det anmodende websted:

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

Bemærk, at lagerrensning kan ødelægge applikationstilstanden, når vi kun rydder en type lagring. Derfor, på grund af ufuldstændig rydning, anvendes overskriften kun, hvis anmodningen er sikker.

5. Konklusion

Spring Security har mange indbyggede funktioner til håndtering af godkendelsesscenarier. Det er altid nyttigt at mestre, hvordan man bruger disse funktioner programmatisk.

Som altid er koden til disse eksempler tilgængelig på GitHub.