Proljetna sigurnost - prilagodite stranicu zabranjenih / zabranjenih pristupa 403

1. Uvod

U ovom ćemo članku pokazati kako prilagodite stranicu odbijenog pristupa u projektu Spring Security.

To se može postići putem konfiguracije Spring Security ili konfiguracije web aplikacija u web.xml datoteka.

U preostalim odjeljcima detaljnije ćemo pogledati svaku od ovih opcija.

2. Prilagođeni JSP

Kad god korisnik pokuša pristupiti stranici koja je ograničena na uloge koje nemaju, aplikacija će vratiti statusni kod od 403, što znači Pristup odbijen.

Da biste stranicu odgovora na status Spring 403 zamijenili prilagođenom, stvorimo prvo a JSP datoteka nazvana accessDenied.jsp:

Žao nam je, nemate dozvolu za pregled ove stranice.

Klik ovdje za povratak na početnu stranicu.

3. Proljetna sigurnosna konfiguracija

Prema zadanim postavkama Spring Security ima ExceptionTranslationFilter definirano koje obrađuje iznimke tipa AuthenticationException i AccessDeniedException. Potonje se vrši putem svojstva tzv accessDeniedHandler, koja koristi AccessDeniedHandlerImpl razred.

Da bismo ovo ponašanje prilagodili upotrebi vlastite stranice koju smo stvorili gore, moramo nadjačati svojstva datoteke ExceptionTranslationFilter razred. To se može učiniti putem Java konfiguracije ili XML konfiguracije.

3.1. Pristup odbijenoj stranici

Koristeći Javu, možemo prilagoditi postupak rukovanja pogreškama 403 pomoću accessDeniedPage () ili accessDeniedHandler () metode tijekom konfiguriranja HttpSecurity element.

Stvorimo konfiguraciju provjere autentičnosti koja ograničava “/ Admin / **"URL-ovi na UPRAVNIK ulogu i postavlja stranicu s odbijenim pristupom na naš običaj accessDenied.jsp stranica:

@Override zaštićena void konfiguracija (konačni HttpSecurity http) baca Exception {http // ... .and () .exceptionHandling (). AccessDeniedPage ("/ accessDenied.jsp"); }

Pogledajmo ekvivalentnu XML konfiguraciju za stranicu s odbijenim pristupom:

3.2. Pristup odbijenom rukovaocu

Korištenje rukovatelja zabranjenog pristupa umjesto stranice ima tu prednost što možemo definirati prilagođenu logiku koja će se izvršiti prije preusmjeravanja na stranicu 403. Za ovo, moramo stvoriti klasu koja implementira AccessDeniedHandler sučelje i poništava ručka () metoda.

Stvorimo običaj AccessDeniedHandler klasa koja bilježi poruku upozorenja za svaki pokušaj odbijenog pristupa koji sadrži korisnika koji je pokušao i zaštićeni URL kojem su pokušavali pristupiti:

javna klasa CustomAccessDeniedHandler implementira AccessDeniedHandler {public static final Logger LOG = Logger.getLogger (CustomAccessDeniedHandler.class); @Override public void handle (HttpServletRequest zahtjev, HttpServletResponse response, AccessDeniedException exc) baca IOException, ServletException {Authentication auth = SecurityContextHolder.getContext (). GetAuthentication (); ako (auth! = null) {LOG.warn ("Korisnik:" + auth.getName () + "pokušao pristupiti zaštićenom URL-u:" + request.getRequestURI ()); } response.sendRedirect (request.getContextPath () + "/ accessDenied"); }}

U sigurnosnoj konfiguraciji, definirat ćemo grah i postaviti običaj AccessDeniedHandler:

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

Ako želimo konfigurirati CustomAccessDeniedHandler klase definirane gore pomoću XML-a, konfiguracija će izgledati malo drugačije:

4. Konfiguracija aplikacije

Rukovanje pogreškom odbijenog pristupa može se izvršiti putem web.xml datoteku web aplikacije, definiranjem datoteke stranica s pogreškama označiti. Sadrži dvije podtagove tzv kod pogreške, koji određuje statusni kod koji se presreće, i mjesto, koji označava URL na koji će korisnik biti preusmjeren u slučaju da se naiđe na kôd pogreške:

 403 / accessDenied 

Ako aplikacija nema web.xml datoteke, kao što je slučaj s Spring Boot, proljetne bilješke trenutno ne pružaju točnu alternativu stranica s pogreškama označiti. Prema proljetnoj dokumentaciji, u ovom slučaju, preporučeni pristup je uporaba metoda accessDeniedPage () i accessDeniedHandler () predstavljen u odjeljku 3.

5. Zaključak

U ovom smo kratkom članku detaljno opisali razne načine na koje se pogreškom uskraćenog pristupa može riješiti pomoću prilagođene stranice 403.

Kompletni izvorni kôd članka može se naći u projektu GitHub.