Logout Keamanan Musim Semi

1. Ikhtisar

Artikel ini dibuat di atas tutorial Login Formulir kami dan akan berfokus pada cara mengonfigurasi Logout dengan Keamanan Musim Semi .

2. Konfigurasi Dasar

Konfigurasi dasar fungsionalitas Spring Logout yang menggunakan metode logout () cukup sederhana:

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

Dan menggunakan konfigurasi XML:

 ...  

Elemen tersebut mengaktifkan mekanisme logout default - yang dikonfigurasi untuk menggunakan url logout berikut : / logout yang dulunya adalah / j_spring_security_logout sebelum Spring Security 4 .

3. JSP dan Link Logout

Melanjutkan contoh sederhana ini, cara menyediakan link logout di aplikasi web adalah:

Logout 

4. Kustomisasi Lanjutan

4.1. logoutSuccessUrl ()

Setelah proses logout berhasil dilakukan, Spring Security akan mengarahkan pengguna ke halaman tertentu. Secara default, ini adalah halaman root ( "/" ) tetapi ini dapat dikonfigurasi:

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

Ini juga dapat dilakukan dengan menggunakan konfigurasi XML:

Bergantung pada aplikasinya, praktik yang baik adalah mengarahkan pengguna kembali ke halaman login:

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

4.2. logoutUrl ()

Mirip dengan default lainnya di Spring Security, URL yang benar-benar memicu mekanisme logout juga memiliki default - / logout .

Namun, sebaiknya ubah nilai default ini, untuk memastikan tidak ada informasi yang dipublikasikan tentang framework apa yang digunakan untuk mengamankan aplikasi:

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

Dan melalui XML:

4.3. invalidateHttpSession dan deleteCookies

Kedua atribut lanjutan ini mengontrol pembatalan sesi serta daftar cookie yang akan dihapus saat pengguna keluar. Dengan demikian, invalidateHttpSession memungkinkan sesi diatur sehingga tidak valid ketika logout terjadi (ini benar secara default).

The deleteCookies metode sederhana juga:

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

Dan versi XML:

4.4. logoutSuccessHandler ()

Untuk skenario lebih lanjut, di mana namespace tidak cukup fleksibel, kacang LogoutSuccessHandler dari Spring Context dapat diganti dengan referensi kustom:

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

Konfigurasi XML yang setara adalah:

 ... 

Semua logika aplikasi khusus yang perlu dijalankan ketika pengguna berhasil keluar dapat diimplementasikan dengan penangan sukses logout khusus. Misalnya - mekanisme audit sederhana yang melacak halaman terakhir tempat pengguna berada saat mereka memicu logout:

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); } }

Juga, perlu diingat bahwa kacang kustom ini memiliki tanggung jawab untuk menentukan tujuan diarahkannya pengguna setelah logout. Karena itu, memasangkan atribut logoutSuccessHandler dengan logoutSuccessUrl tidak akan berfungsi, karena keduanya mencakup fungsionalitas yang serupa.

5. Kesimpulan

Dalam contoh ini, kami mulai dengan menyiapkan sampel logout sederhana dengan Spring Security, lalu kami membahas opsi lebih lanjut yang tersedia.

Penerapan Tutorial Logout Musim Semi ini dapat ditemukan di proyek GitHub - ini adalah proyek berbasis Eclipse, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.

Ketika proyek berjalan secara lokal, contoh HTML dapat diakses di:

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