A tavaszi biztonsági kijelentkezési átirányítások letiltása

1. Áttekintés

Ebben a rövid bemutatóban alaposan meg fogjuk vizsgálni hogyan tilthatja le a kijelentkezési átirányításokat a Spring Security alkalmazásban.

Először a Spring Security rövid áttekintésével kezdjük a kijelentkezési folyamat működését. Ezután gyakorlati példán keresztül szemléltetjük, hogyan lehet elkerülni a felhasználók átirányítását a sikeres kijelentkezés után.

2. Kijelentkezés a Spring Security alkalmazásban

Röviden, a Spring Security a dobozon kívüli támogatást nyújt a kijelentkezési mechanizmushoz a Kijelentkezés() DSL módszer. Alapvetően, A Spring Security kiváltja a kijelentkezést, amikor a felhasználó eléri az alapértelmezett kijelentkezési URL-t, amely /Kijelentkezés.

Érdemes megemlíteni, hogy a kijelentkezési URL alapértelmezett értéke / j_spring_security_logout tavaszi biztonság előtt 4.

A Spring Security lehetőséget kínál a felhasználók átirányítására egy adott URL-re kijelentkezés után. Van azonban néhány alkalom, amikor el akarjuk kerülni ezt a viselkedést.

Tehát minden további nélkül nézzük meg, hogyan lehet megvalósítani a kijelentkezési átirányítások letiltásának logikáját a Spring Security alkalmazásban.

3. Tiltsa le a tavaszi biztonsági kijelentkezési átirányítást

Alapértelmezés szerint a Spring Security átirányítja a felhasználókat / login? kijelentkezés sikeres kijelentkezés után. Tehát ebben a szakaszban arra fogunk koncentrálni, hogy miként lehet megakadályozni a felhasználók átirányítását a bejelentkezési oldalra a kijelentkezés után.

Ne feledje, hogy az alapértelmezett átirányítási URL-t felülírhatjuk a logoutSuccessUrl () DSL módszer.

A fő szempont itt bemutatni, hogyan lehet elkerülni az átirányítást, amikor a /Kijelentkezés Az URL-t egy REST kliens hívja.

Ami azt illeti, a NaplóoutSuccessHandler Az interfész rugalmas módot kínál az egyedi logika végrehajtására, amikor a kijelentkezési folyamat sikeresen végrehajtásra kerül.

Tehát itt leszünk használjon szokást LogoutSuccessHandler csak egy tiszta 200 állapotkódot adjon vissza. Így nem fog minket egyetlen oldalra irányítani.

Most hajtsuk végre a szükséges tavaszi biztonsági konfigurációt a kijelentkezési átirányítások letiltásához:

@Configuration @EnableWebSecurity nyilvános osztály ) .logout (kijelentkezés -> kijelentkezés .permitAll () .logoutSuccessHandler ((kérés, válasz, hitelesítés) -> {response.setStatus (HttpServletResponse.SC_OK);});}}}

A fenti konfigurációból fontos megjegyezni a logoutSuccessHandler () módszer. Mint láthatjuk, lambda kifejezéssel definiáljuk az egyéni kijelentkezési sikerkezelőnket.

Ne feledje, hogy létrehozhatunk egy egyszerű megvalósítási osztályt is a LogoutSuccessHandler interfészt, és a DSL segítségével továbbítsa a logoutSuccessHandler () módszer.

4. Tesztelés

Most, hogy az összes darabot összeállítottuk, teszteljük /Kijelentkezés végpont annak megerősítésére, hogy minden a várt módon működik.

Ne feledje, hogy használni fogjuk MockMvc küldeni /Kijelentkezés kérés a tesztünkben.

Először hozzunk létre egy egyszerű tesztosztályt, és adjuk be a MockMvc objektum benne:

public class LogoutApplicationUnitTest {@Autowired private MockMvc mockMvc; // próbaper }

Most, írjunk egy módszert a tesztelésre /Kijelentkezés végpont:

@Test public void whenLogout_thenDisableRedirect () dobja a Kivételt {this.mockMvc.perform (post ("/ logout"). With (csrf ())) .andExpect (status (). IsOk ()) .andExpect (jsonPath ("$") ) .doesNotExist ()) .andExpect (nem hitelesített ()) .andReturn (); }

Végül próbáljuk meg lebontani a tesztkódunkat:

  • teljesít (post (“/ logout”)) meghívja a /Kijelentkezés végpont egyszerű POST kérésként
  • a (csrf ()) hozzáteszi a várható _csrf paraméter a lekérdezéshez
  • állapot() a HTTP válasz állapotkódját adja vissza
  • jsonPath () lehetővé teszi a HTTP-válasz törzsének elérését és ellenőrzését

5. Következtetés

Összefoglalva, elmagyaráztuk és szemléltettük, hogyan lehet kezelni a kijelentkezési átirányítások letiltásának kihívását a Spring Security és a Spring Boot alkalmazásban.

Szokás szerint a cikk teljes forráskódja elérhető a GitHubon.