Spring Security Logout

1. Oversikt

Denne artikkelen bygger på toppen av skjemainnloggingsveiledningen og kommer til å fokusere på hvordan du konfigurerer Logg ut med Spring Security.

2. Grunnleggende konfigurasjon

Den grunnleggende konfigurasjonen av Våren Logout funksjonalitet bruker Logg ut() metoden er enkel nok:

@Configuration @EnableWebSecurity offentlig klasse SecSecurityConfig utvider WebSecurityConfigurerAdapter {@Override-beskyttet ugyldig konfigurering (siste HttpSecurity http) kaster unntak {http // ... .logout () // ...} // ...}

Og ved hjelp av XML-konfigurasjon:

 ...  

Elementet aktiverer standard avloggingsmekanisme - som er konfigurert til å bruke følgende logg url: /Logg ut som pleide å være / j_spring_security_logout før vårsikkerhet 4.

3. JSP og Logout Link

Fortsetter dette enkle eksemplet, måten å gi en avloggingskobling i webapplikasjonen er:

Logg ut 

4. Avanserte tilpasninger

4.1. logoutSuccessUrl ()

Etter at utloggingsprosessen er utført vellykket, vil Spring Security omdirigere brukeren til en spesifisert side. Som standard er dette rotsiden (“/”) men dette kan konfigureres:

// ... .logout () .logoutSuccessUrl ("/ afterlogout.html") // ...

Dette kan også gjøres ved hjelp av XML-konfigurasjon:

Avhengig av applikasjon, er en god praksis å omdirigere brukeren tilbake til påloggingssiden:

// ... .logout () .logoutSuccessUrl ("/ login.html") // ...

4.2. logoutUrl ()

I likhet med andre standarder i Spring Security, har URL-en som faktisk utløser avloggingsmekanismen også en standard - /Logg ut.

Det er imidlertid en god ide å endre denne standardverdien for å sikre at ingen informasjon blir publisert om hvilket rammeverk som brukes til å sikre applikasjonen:

.logout () .logoutUrl ("/ perform_logout")

Og gjennom XML:

4.3. ugyldiggjøreHttpSession og deleteCookies

Disse to avanserte attributtene styrer ugyldighetsøkten, samt en liste over informasjonskapsler som skal slettes når brukeren logger av. Som sådan, ugyldiggjøreHttpSession lar økten settes opp slik at den ikke blir ugyldig når avlogging skjer (den er ekte som standard).

De deleteCookies metoden er også enkel:

.logout () .logoutUrl ("/ perform_logout") .invalidateHttpSession (true) .deleteCookies ("JSESSIONID")

Og XML-versjonen:

4.4. logoutSuccessHandler ()

For mer avanserte scenarier, hvor navneområdet ikke er fleksibelt nok, LogoutSuccessHandler bønne fra vårkonteksten kan erstattes av en tilpasset referanse:

@Bean public LogoutSuccessHandler logoutSuccessHandler () {return new CustomLogoutSuccessHandler (); } // ... .logout () .logoutSuccessHandler (logoutSuccessHandler ()); // ...

Den tilsvarende XML-konfigurasjonen er:

 ... 

Noen tilpasset applikasjonslogikk som må kjøres når brukeren logger av kan implementeres med tilpasset logout suksessbehandler. For eksempel - en enkel revisjonsmekanisme som holder oversikt over den siste siden brukeren var på da de utløste avlogging:

offentlig klasse CustomLogoutSuccessHandler utvider SimpleUrlLogoutSuccessHandler implementerer LogoutSuccessHandler {@Autowired private AuditService auditService; @Override public void onLogoutSuccess (HttpServletRequest request, HttpServletResponse response, Authentication authentication) kaster IOException, ServletException {String refererUrl = request.getHeader ("Referer"); auditService.track ("Logg ut fra:" + refererUrl); super.onLogoutSuccess (forespørsel, svar, autentisering); }}

Husk også at denne egendefinerte bønnen har ansvaret for å bestemme destinasjonen brukeren blir henvist til etter å ha logget av. På grunn av dette, sammenkobling av logoutSuccessHandler attributt med logoutSuccessUrl kommer ikke til å fungere, da begge dekker lignende funksjonalitet.

5. Konklusjon

I dette eksemplet startet vi med å sette opp et enkelt utloggingseksempel med Spring Security, og vi diskuterte de mer avanserte alternativene som er tilgjengelige.

Implementeringen av denne vårlogoutopplæringen finner du i GitHub-prosjektet - dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.

Når prosjektet kjøres lokalt, kan du få tilgang til HTML-eksemplet på:

//localhost:8080/spring-security-mvc-login/login.html