Keamanan Musim Semi - Sesuaikan Halaman 403 Terlarang / Akses Ditolak

1. Perkenalan

Pada artikel ini, kami akan menunjukkan cara menyesuaikan halaman akses ditolak dalam proyek Keamanan Musim Semi .

Ini dapat dicapai baik melalui konfigurasi Spring Security atau konfigurasi aplikasi web di file web.xml .

Di bagian selanjutnya, kita akan melihat lebih dalam pada masing-masing opsi ini.

2. JSP Kustom

Setiap kali pengguna mencoba mengakses halaman yang dibatasi untuk peran yang tidak mereka miliki, aplikasi akan mengembalikan kode status 403, yang berarti Akses Ditolak .

Untuk mengganti halaman respons status Spring 403 dengan halaman kustom, pertama-tama mari buat file JSP bernama accessDenied.jsp :

Sorry, you do not have permission to view this page.

Click here to go back to the Homepage.

3. Konfigurasi Keamanan Pegas

Secara default, Keamanan Musim Semi memiliki ExceptionTranslationFilter yang ditentukan yang menangani pengecualian tipe AuthenticationException dan AccessDeniedException . Yang terakhir dilakukan melalui properti yang disebut accessDeniedHandler, yang menggunakan kelas AccessDeniedHandlerImpl .

Untuk menyesuaikan perilaku ini untuk menggunakan halaman kita sendiri yang kita buat di atas, kita perlu mengganti properti kelas ExceptionTranslationFilter . Ini dapat dilakukan melalui konfigurasi Java atau konfigurasi XML.

3.1. Akses Halaman Ditolak

Menggunakan Java, kita dapat menyesuaikan proses penanganan error 403 dengan menggunakan accessDeniedPage () atau accessDeniedHandler () metode sementara mengkonfigurasi HttpSecurity elemen.

Mari buat konfigurasi autentikasi yang membatasi URL "/ admin / ** " ke peran ADMIN dan setel halaman akses ditolak ke halaman accessDenied.jsp kustom kami :

@Override protected void configure(final HttpSecurity http) throws Exception { http // ... .and() .exceptionHandling().accessDeniedPage("/accessDenied.jsp"); }

Mari kita lihat konfigurasi XML yang setara untuk halaman akses ditolak:

3.2. Access Denied Handler

Menggunakan penangan akses ditolak alih-alih halaman memiliki keuntungan bahwa kita dapat mendefinisikan logika kustom untuk dieksekusi sebelum dialihkan ke halaman 403. Untuk ini, kita perlu membuat kelas yang mengimplementasikan antarmuka AccessDeniedHandler dan mengganti metode handle () .

Mari buat kelas AccessDeniedHandler kustom yang mencatat pesan peringatan untuk setiap upaya penolakan akses yang berisi pengguna yang melakukan upaya tersebut dan URL terlindungi yang mereka coba akses:

public class CustomAccessDeniedHandler implements AccessDeniedHandler { public static final Logger LOG = Logger.getLogger(CustomAccessDeniedHandler.class); @Override public void handle( HttpServletRequest request, HttpServletResponse response, AccessDeniedException exc) throws IOException, ServletException { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null) { LOG.warn("User: " + auth.getName() + " attempted to access the protected URL: " + request.getRequestURI()); } response.sendRedirect(request.getContextPath() + "/accessDenied"); } }

Dalam konfigurasi keamanan, kami akan menentukan kacang dan mengatur AccessDeniedHandler kustom :

@Bean public AccessDeniedHandler accessDeniedHandler(){ return new CustomAccessDeniedHandler(); } //... .exceptionHandling().accessDeniedHandler(accessDeniedHandler()); 

Jika kita ingin mengonfigurasi kelas CustomAccessDeniedHandler yang ditentukan di atas menggunakan XML, konfigurasinya akan terlihat sedikit berbeda:

4. Konfigurasi Aplikasi

Menangani kesalahan akses ditolak dapat dilakukan melalui file web.xml aplikasi web, dengan mendefinisikan tag halaman kesalahan . Ini berisi dua sub tag yang disebut kode kesalahan, yang menentukan kode status yang akan dicegat, dan lokasi, yang menandakan URL ke mana pengguna akan diarahkan jika kode kesalahan ditemukan:

 403 /accessDenied 

Jika aplikasi tidak memiliki file web.xml , seperti pada Spring Boot, anotasi Spring saat ini tidak memberikan alternatif yang tepat untuk tag halaman kesalahan . Menurut dokumentasi Spring, dalam hal ini, pendekatan yang disarankan adalah menggunakan metode accessDeniedPage () dan accessDeniedHandler () yang disajikan di bagian 3.

5. Kesimpulan

Dalam artikel singkat ini, kami telah merinci berbagai cara di mana kesalahan akses ditolak dapat ditangani menggunakan halaman 403 tersuai.

Kode sumber lengkap artikel dapat ditemukan di proyek GitHub.