Deconectare de securitate de primăvară

1. Prezentare generală

Acest articol se construiește pe partea de sus a tutorialului nostru de conectare la formular și se va concentra asupra modului de configurare a deconectării cu Spring Security .

2. Configurare de bază

Configurarea de bază a funcționalității Spring Logout utilizând metoda logout () este suficient de simplă:

@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http //... .logout() //... } //... }

Și folosind configurația XML:

 ...  

Elementul activează mecanismul de deconectare implicit - care este configurat pentru a utiliza următoarea adresă URL de deconectare : / deconectare care a fost / j_spring_security_logout înainte de Spring Security 4 .

3. JSP și linkul de deconectare

Continuând acest exemplu simplu, modalitatea de a furniza un link de deconectare în aplicația web este:

Logout 

4. Personalizări avansate

4.1. logoutSuccessUrl ()

După ce procesul de deconectare este efectuat cu succes, Spring Security va redirecționa utilizatorul către o pagină specificată. În mod implicit, aceasta este pagina rădăcină ( „/” ), dar aceasta este configurabilă:

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

Acest lucru se poate face și folosind configurația XML:

În funcție de aplicație, o bună practică este de a redirecționa utilizatorul înapoi la pagina de autentificare:

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

4.2. logoutUrl ()

Similar cu alte valori implicite din Spring Security, adresa URL care declanșează efectiv mecanismul de deconectare are și o valoare implicită - / deconectare .

Cu toate acestea, este o idee bună să modificați această valoare implicită, pentru a vă asigura că nu sunt publicate informații despre ce cadru este utilizat pentru securizarea aplicației:

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

Și prin XML:

4.3. invalidateHttpSession și deleteCookies

Aceste două atribute avansate controlează invalidarea sesiunii, precum și o listă de cookie-uri care trebuie șterse atunci când utilizatorul se deconectează. Ca atare, invalidateHttpSession permite configurarea sesiunii astfel încât să nu fie invalidată atunci când are loc deconectarea (este adevărat în mod implicit).

Și metoda deleteCookies este simplă:

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

Și versiunea XML:

4.4. logoutSuccessHandler ()

Pentru scenarii mai avansate, unde spațiul de nume nu este suficient de flexibil, bean-ul LogoutSuccessHandler din contextul de primăvară poate fi înlocuit cu o referință personalizată:

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

Configurația XML echivalentă este:

 ... 

Orice logică de aplicație personalizată care trebuie să ruleze atunci când utilizatorul se deconectează cu succes poate fi implementată cu un handler de succes de deconectare personalizat. De exemplu - un mecanism de audit simplu care ține evidența ultimei pagini pe care se afla utilizatorul când a declanșat deconectarea:

public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler { @Autowired private AuditService auditService; @Override public void onLogoutSuccess( HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { String refererUrl = request.getHeader("Referer"); auditService.track("Logout from: " + refererUrl); super.onLogoutSuccess(request, response, authentication); } }

De asemenea, rețineți că acest bean personalizat are responsabilitatea de a determina destinația către care este îndreptat utilizatorul după deconectare. Din acest motiv, asocierea atributului logoutSuccessHandler cu logoutSuccessUrl nu va funcționa, deoarece ambele acoperă funcționalități similare.

5. Concluzie

În acest exemplu, am început prin configurarea unui eșantion simplu de deconectare cu Spring Security și apoi am discutat despre opțiunile mai avansate disponibile.

Implementarea acestui tutorial Spring Logout poate fi găsită în proiectul GitHub - acesta este un proiect bazat pe Eclipse, deci ar trebui să fie ușor de importat și rulat așa cum este.

Când proiectul rulează local, exemplul HTML poate fi accesat la:

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