Spring Security Uitloggen

1. Overzicht

Dit artikel bouwt voort op onze tutorial Formulier inloggen en gaat zich concentreren op het configureren Uitloggen met Spring Security.

2. Basisconfiguratie

De basisconfiguratie van Spring Logout-functionaliteit de ... gebruiken uitloggen() methode is eenvoudig genoeg:

@Configuration @EnableWebSecurity openbare klasse SecSecurityConfig breidt WebSecurityConfigurerAdapter uit {@Override protected void configure (laatste HttpSecurity http) gooit uitzondering {http // ... .logout () // ...} // ...}

En met behulp van XML-configuratie:

 ...  

Het element schakelt het standaard afmeldingsmechanisme in - dat is geconfigureerd om het volgende te gebruiken uitlog-url: /uitloggen die vroeger was / j_spring_security_logout voor Spring Security 4.

3. De JSP en de afmeldlink

Voortzetting van dit eenvoudige voorbeeld, de manier om een uitloglink in de webapplicatie is:

Uitloggen 

4. Geavanceerde aanpassingen

4.1. logoutSuccessUrl ()

Nadat het uitlogproces met succes is uitgevoerd, zal Spring Security de gebruiker omleiden naar een gespecificeerde pagina. Dit is standaard de hoofdpagina (“/”) maar dit is configureerbaar:

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

Dit kan ook worden gedaan met behulp van XML-configuratie:

Afhankelijk van de toepassing is het een goede gewoonte om de gebruiker terug te leiden naar de inlogpagina:

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

4.2. logoutUrl ()

Net als bij andere standaardinstellingen in Spring Security, heeft de URL die het uitlogmechanisme daadwerkelijk activeert ook een standaardwaarde: /uitloggen.

Het is echter een goed idee om deze standaardwaarde te wijzigen om ervoor te zorgen dat er geen informatie wordt gepubliceerd over welk framework wordt gebruikt om de applicatie te beveiligen:

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

En via XML:

4.3. invalidateHttpSession en Verwijder cookies

Deze twee geavanceerde kenmerken regelen de ongeldigverklaring van de sessie en een lijst met cookies die moeten worden verwijderd wanneer de gebruiker uitlogt. Als zodanig, invalidateHttpSession maakt het mogelijk om de sessie zo in te stellen dat deze niet ongeldig wordt gemaakt wanneer er wordt uitgelogd (het is waar standaard).

De Verwijder cookies methode is ook eenvoudig:

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

En de XML-versie:

4.4. logoutSuccessHandler ()

Voor meer geavanceerde scenario's, waarbij de naamruimte niet flexibel genoeg is, is het LogoutSuccessHandler bean uit de Spring Context kan worden vervangen door een aangepaste referentie:

@Bean openbare LogoutSuccessHandler logoutSuccessHandler () {retourneer nieuwe CustomLogoutSuccessHandler (); } // ... .logout () .logoutSuccessHandler (logoutSuccessHandler ()); // ...

De equivalente XML-configuratie is:

 ... 

Ieder aangepaste toepassingslogica die moet worden uitgevoerd wanneer de gebruiker zich met succes afmeldt kan worden geïmplementeerd met een aangepaste afmeldingssucces-handler. Bijvoorbeeld - een eenvoudig controlemechanisme dat bijhoudt op welke pagina de gebruiker zich voor het laatst bevond toen hij uitlogde:

openbare klasse CustomLogoutSuccessHandler breidt SimpleUrlLogoutSuccessHandler uit met LogoutSuccessHandler {@Autowired private AuditService auditService; @Override public void onLogoutSuccess (HttpServletRequest-verzoek, HttpServletResponse-antwoord, Authenticatie-authenticatie) gooit IOException, ServletException {String refererUrl = request.getHeader ("Referer"); auditService.track ("Uitloggen van:" + refererUrl); super.onLogoutSuccess (verzoek, antwoord, authenticatie); }}

Houd er ook rekening mee dat deze aangepaste bean de verantwoordelijkheid heeft om de bestemming te bepalen waarnaar de gebruiker wordt doorverwezen nadat hij is uitgelogd. Daarom is het koppelen van de logoutSuccessHandler attribuut met logoutSuccessUrl gaat niet werken, aangezien beide een vergelijkbare functionaliteit hebben.

5. Conclusie

In dit voorbeeld zijn we begonnen met het opzetten van een eenvoudig uitlogvoorbeeld met Spring Security, en vervolgens hebben we de meer geavanceerde beschikbare opties besproken.

De implementatie van deze Spring Logout-zelfstudie is te vinden in het GitHub-project - dit is een op Eclipse gebaseerd project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.

Wanneer het project lokaal wordt uitgevoerd, is de voorbeeld-HTML toegankelijk via:

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