Spring Security Logout

1. Oversigt

Denne artikel bygger på toppen af ​​vores Form Login tutorial og vil fokusere på, hvordan man konfigurerer Log ud med Spring Security.

2. Grundlæggende konfiguration

Den grundlæggende konfiguration af Spring Logout funktionalitet bruger Log ud() metoden er enkel nok:

@Configuration @EnableWebSecurity offentlig klasse SecSecurityConfig udvider WebSecurityConfigurerAdapter {@Override beskyttet ugyldig konfiguration (endelig HttpSecurity http) kaster undtagelse {http // ... .logout () // ...} // ...}

Og ved hjælp af XML-konfiguration:

 ...  

Elementet aktiverer standardlogoutmekanismen - som er konfigureret til at bruge følgende logout url: /Log ud som plejede at være / j_spring_security_logout inden forårssikkerhed 4.

3. JSP og Logout Link

Fortsætter dette enkle eksempel, måden at give en logout-link i webapplikationen er:

Log ud 

4. Avancerede tilpasninger

4.1. logoutSuccessUrl ()

Når udlogningsprocessen er udført, omdirigerer Spring Security brugeren til en bestemt side. Som standard er dette rodsiden (“/”) men dette kan konfigureres:

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

Dette kan også gøres ved hjælp af XML-konfiguration:

Afhængigt af applikationen er en god praksis at omdirigere brugeren tilbage til login-siden:

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

4.2. logoutUrl ()

I lighed med andre standardindstillinger i Spring Security har URL'en, der faktisk udløser logoutmekanismen, også en standard - /Log ud.

Det er dog en god ide at ændre denne standardværdi for at sikre, at der ikke offentliggøres oplysninger om, hvilken ramme der bruges til at sikre applikationen:

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

Og gennem XML:

4.3. ugyldiggøreHttpSession og deleteCookies

Disse to avancerede attributter styrer ugyldigheden af ​​sessionen samt en liste over cookies, der skal slettes, når brugeren logger af. Som sådan, ugyldiggøreHttpSession tillader, at sessionen konfigureres, så den ikke ugyldiggøres, når der logges ud (den er rigtigt som standard).

Det deleteCookies metoden er også enkel:

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

Og XML-versionen:

4.4. logoutSuccessHandler ()

For mere avancerede scenarier, hvor navneområdet ikke er fleksibelt nok, vises LogoutSuccessHandler bønne fra Spring Context kan erstattes af en brugerdefineret reference:

@Bean offentlig LogoutSuccessHandler logoutSuccessHandler () {returner ny CustomLogoutSuccessHandler (); } // ... .logout () .logoutSuccessHandler (logoutSuccessHandler ()); // ...

Den tilsvarende XML-konfiguration er:

 ... 

Nogen brugerdefineret applikationslogik, der skal køre, når brugeren logger ud kan implementeres med tilpasset logout-succeshåndterer. For eksempel - en simpel revisionsmekanisme, der holder styr på den sidste side, som brugeren var på, da de udløste logout:

offentlig klasse CustomLogoutSuccessHandler udvider SimpleUrlLogoutSuccessHandler implementerer LogoutSuccessHandler {@Autowired private AuditService auditService; @Override offentlig ugyldighed onLogoutSuccess (HttpServletRequest anmodning, HttpServletResponse svar, godkendelse godkendelse) kaster IOException, ServletException {String refererUrl = request.getHeader ("Referer"); auditService.track ("Logout fra:" + refererUrl); super.onLogoutSuccess (anmodning, svar, godkendelse); }}

Husk også, at denne brugerdefinerede bønne har ansvaret for at bestemme den destination, som brugeren henvises til efter at have logget af. På grund af dette parrer du logoutSuccessHandler attribut med logoutSuccessUrl fungerer ikke, da begge dækker lignende funktionalitet.

5. Konklusion

I dette eksempel startede vi med at oprette en simpel logouteksempel med Spring Security, og vi diskuterede derefter de mere avancerede tilgængelige muligheder.

Implementeringen af ​​denne Spring Logout Tutorial kan findes i GitHub-projektet - dette er et Eclipse-baseret projekt, så det skal være let at importere og køre som det er.

Når projektet kører lokalt, kan du få adgang til HTML-eksemplet på:

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