Proljetna sigurnosna odjava

1. Pregled

Ovaj se članak nadovezuje na naš vodič za prijavu u obrazac i usredotočit će se na način konfiguriranja Odjava s Spring Security.

2. Osnovna konfiguracija

Osnovna konfiguracija Proljetna odjava funkcionalnost koristiti Odjavite se() metoda je dovoljno jednostavna:

@Configuration @EnableWebSecurity javna klasa SecSecurityConfig proširuje WebSecurityConfigurerAdapter {@Override zaštićena void konfiguracija (konačni HttpSecurity http) baca izuzetak {http // ... .logout () // ...} // ...}

I pomoću XML konfiguracije:

 ...  

Element omogućuje zadani mehanizam odjave - koji je konfiguriran da koristi sljedeće url za odjavu: /Odjavite se što je nekad bilo / j_spring_security_logout prije proljetne sigurnosti 4.

3. JSP i veza za odjavu

Nastavljajući ovaj jednostavan primjer, način pružanja a veza za odjavu u web aplikaciji je:

Odjavite se 

4. Napredne prilagodbe

4.1. logoutSuccessUrl ()

Nakon što se postupak odjave uspješno izvede, Spring Security će preusmjeriti korisnika na navedenu stranicu. Prema zadanim postavkama ovo je korijenska stranica (“/”), ali ovo je moguće konfigurirati:

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

To se također može učiniti pomoću XML konfiguracije:

Ovisno o aplikaciji, dobra praksa je preusmjeriti korisnika natrag na stranicu za prijavu:

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

4.2. logoutUrl ()

Slično ostalim zadanim postavkama Spring Springa, i URL koji zapravo pokreće mehanizam odjave također ima zadane vrijednosti - /Odjavite se.

Međutim, dobra je ideja promijeniti ovu zadanu vrijednost kako biste bili sigurni da se ne objavljuju informacije o tome koji se okvir koristi za zaštitu aplikacije:

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

I kroz XML:

4.3. invalidateHttpSession i deleteCookie

Ova dva napredna atributa kontroliraju poništavanje sesije, kao i popis kolačića koji će se izbrisati kada se korisnik odjavi. Kao takav, invalidateHttpSession omogućuje postavljanje sesije tako da ne bude onesposobljena kada se odjava dogodi (to je pravi prema zadanim postavkama).

The deleteCookie metoda je također jednostavna:

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

I XML verzija:

4.4. logoutSuccessHandler ()

Za naprednije scenarije, gdje prostor imena nije dovoljno fleksibilan, LogoutSuccessHandler grah iz proljetnog konteksta može se zamijeniti prilagođenom referencom:

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

Ekvivalentna XML konfiguracija je:

 ... 

Bilo koji prilagođena logika aplikacije koja se treba pokrenuti kad se korisnik uspješno odjavi može se implementirati s prilagođenim obrađivačem uspjeha odjave. Na primjer - jednostavan mehanizam revizije koji prati posljednju stranicu na kojoj je korisnik bio kad je pokrenuo odjavu:

javna klasa CustomLogoutSuccessHandler proširuje SimpleUrlLogoutSuccessHandler implementira LogoutSuccessHandler {@Autowired private AuditService auditService; @Override public void onLogoutSuccess (zahtjev za HttpServletRequest, odgovor HttpServletResponse, autentifikacija za autentifikaciju) baca IOException, ServletException {String refererUrl = request.getHeader ("Referer"); auditService.track ("Odjava sa:" + refererUrl); super.onLogoutSuccess (zahtjev, odgovor, provjera autentičnosti); }}

Također imajte na umu da je ovaj prilagođeni grah odgovoran odrediti odredište na koje je korisnik usmjeren nakon odjave. Zbog ovoga, uparivanje logoutSuccessHandler atribut sa odjavaSuccessUrl neće raditi, jer obje pokrivaju slične funkcije.

5. Zaključak

U ovom smo primjeru započeli postavljanjem jednostavnog uzorka odjave s Spring Security, a zatim smo razgovarali o naprednijim dostupnim opcijama.

Provedbu ovog vodiča za proljetnu odjavu možete pronaći u projektu GitHub - ovo je projekt zasnovan na Eclipseu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.

Kada se projekt izvodi lokalno, primjeru HTML-a može se pristupiti na:

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