Hoe Spring Security Logout Redirects uit te schakelen

1. Overzicht

In deze korte tutorial gaan we die nader bekijken hoe u omleidingen voor uitloggen in Spring Security uitschakelt.

We beginnen eerst met een korte achtergrond over hoe de uitlogstroom werkt in Spring Security. Vervolgens laten we aan de hand van een praktisch voorbeeld zien hoe u kunt voorkomen dat gebruikers worden omgeleid na een geslaagde afmelding.

2. Log uit in Spring Security

Kortom, Spring Security biedt kant-en-klare ondersteuning voor het uitlogmechanisme via het uitloggen() DSL-methode. Eigenlijk, Spring Security activeert uitloggen wanneer een gebruiker de standaard uitlog-URL raakt, namelijk /uitloggen.

Het is vermeldenswaard dat de standaardwaarde van de uitlog-URL / j_spring_security_logout voor Spring Security 4.

Spring Security biedt de mogelijkheid om gebruikers na uitloggen naar een bepaalde URL om te leiden. Er zijn echter situaties waarin we dit gedrag willen vermijden.

Dus, zonder verder oponthoud, laten we eens kijken hoe we de logica van het uitschakelen van uitlog-omleidingen in Spring Security kunnen implementeren.

3. Schakel Spring Security Logout Redirect uit

Spring Security leidt gebruikers standaard om naar /Log in Log uit na een geslaagde afmelding. Dus in dit gedeelte gaan we ons concentreren op hoe we kunnen voorkomen dat gebruikers doorverwijzen naar de inlogpagina na het uitloggen.

Merk op dat we de standaard omleidings-URL kunnen overschrijven met behulp van de logoutSuccessUrl () DSL-methode.

Het belangrijkste punt hier is om te laten zien hoe u omleiding kunt vermijden wanneer het /uitloggen URL wordt aangeroepen vanaf een REST-client.

In feite is de LogboekoutSuccessHandler interface biedt een flexibele manier om aangepaste logica uit te voeren wanneer het uitlogproces succesvol is uitgevoerd.

Dus hier zullen we gebruik een gewoonte LogoutSuccessHandler om alleen een schone 200-statuscode te retourneren. Op die manier worden we niet doorgestuurd naar een pagina.

Laten we nu de nodige Spring Security-configuratie implementeren die nodig is om uitlog-omleidingen uit te schakelen:

@Configuration @EnableWebSecurity openbare klasse SpringSecurityConfig breidt WebSecurityConfigurerAdapter uit {@Override protected void configure (HttpSecurity http) gooit uitzondering {http .authorizeRequests (authz -> authz .mvcMatchers ("/ login"). ) .logout (logout -> logout .permitAll () .logoutSuccessHandler ((verzoek, antwoord, authenticatie) -> {response.setStatus (HttpServletResponse.SC_OK);});}}

Het belangrijkste om op te merken van de bovenstaande configuratie is de logoutSuccessHandler () methode. Zoals we kunnen zien, gebruiken we een lambda-expressie om onze aangepaste afmeldingssucces-handler te definiëren.

Houd er rekening mee dat we ook een eenvoudige implementatieklasse van het LogoutSuccessHandler interface en gebruik DSL om het door te geven aan de logoutSuccessHandler () methode.

4. Testen

Nu we alle stukjes in elkaar hebben gezet, gaan we de /uitloggen eindpunt om te bevestigen dat alles werkt zoals verwacht.

Merk op dat we zullen gebruiken MockMvc versturen /uitloggen verzoek in onze test.

Laten we eerst een eenvoudige testklasse maken en de MockMvc object erin:

openbare klasse LogoutApplicationUnitTest {@Autowired privé MockMvc mockMvc; // testcase}

Nu, laten we een methode schrijven om onze /uitloggen eindpunt:

@Test public void whenLogout_thenDisableRedirect () gooit uitzondering {this.mockMvc.perform (post ("/ logout"). Met (csrf ())) .andExpect (status (). IsOk ()) .andExpect (jsonPath ("$") ) .doesNotExist ()) .andExpect (niet-geverifieerd ()) .andReturn (); }

Laten we ten slotte proberen onze testcode op te splitsen:

  • perform (post ("/ logout")) roept de /uitloggen eindpunt als een eenvoudig POST-verzoek
  • met (csrf ()) voegt het verwachte _csrf parameter toe aan de query
  • toestand() geeft de statuscode van het HTTP-antwoord terug
  • jsonPath () geeft toegang tot en inspectie van de body van het HTTP-antwoord

5. Conclusie

Samenvattend hebben we uitgelegd en geïllustreerd hoe we de uitdaging van het uitschakelen van omleidingen voor uitloggen in Spring Security en Spring Boot kunnen aanpakken.

Zoals gewoonlijk is de volledige broncode voor dit artikel beschikbaar op GitHub.


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