Vårsikkerhet - Tilpass 403 Forbidden / Access Denied Page

1. Introduksjon

I denne artikkelen vil vi vise hvordan du gjør det tilpasse siden nektet tilgang i et Spring Security-prosjekt.

Dette kan oppnås enten gjennom vårsikkerhetskonfigurasjonen eller konfigurasjonen av webapplikasjonen i web.xml fil.

I de resterende delene vil vi se nærmere på hvert av disse alternativene.

2. Egendefinert JSP

Når en bruker prøver å få tilgang til en side som er begrenset til roller de ikke har, vil applikasjonen returnere en statuskode på 403, som betyr Ingen tilgang.

For å erstatte vårens 403-statusresponsside med en tilpasset, la oss først lage en JSP fil kalt accessDenied.jsp:

Beklager, du har ikke tillatelse til å se denne siden.

Klikk her for å gå tilbake til hjemmesiden.

3. Vårs sikkerhetskonfigurasjon

Som standard har Spring Security en UnntakTranslationFilter definert som håndterer unntak av typen AuthenticationException og AccessDeniedException. Sistnevnte gjøres gjennom en eiendom som heter accessDeniedHandler, som bruker AccessDeniedHandlerImpl klasse.

For å tilpasse denne oppførselen til å bruke vår egen side som vi opprettet ovenfor, må vi overstyre egenskapene til UnntakTranslationFilter klasse. Dette kan gjøres enten gjennom Java-konfigurasjon eller XML-konfigurasjon.

3.1. Få tilgang til nektet side

Ved hjelp av Java, Vi kan tilpasse 403 feilhåndteringsprosessen ved å bruke accessDeniedPage () eller accessDeniedHandler () metoder mens du konfigurerer HttpSikkerhet element.

La oss lage en autentiseringskonfigurasjon som begrenser “/ Admin / **”URLer til ADMIN rolle og setter siden nektet tilgang til vår skikk accessDenied.jsp side:

@ Override beskyttet ugyldig konfigurasjon (endelig HttpSecurity http) kaster Unntak {http // ... .and () .exceptionHandling (). AccessDeniedPage ("/ accessDenied.jsp"); }

La oss ta en titt på den tilsvarende XML-konfigurasjonen for siden nektet tilgang:

3.2. Få tilgang til nektet håndterer

Å bruke en tilgang nektet behandler i stedet for en side har fordelen at vi kan definere tilpasset logikk som skal utføres før vi omdirigerer til 403-siden. For dette, vi trenger å lage en klasse som implementerer AccessDeniedHandler grensesnitt og overstyrer håndtak() metode.

La oss lage en tilpasset AccessDeniedHandler klasse som logger en advarsel for hvert tilgang nektet forsøk som inneholder brukeren som gjorde forsøket og den beskyttede URL-en de prøvde å få tilgang til:

offentlig klasse CustomAccessDeniedHandler implementerer AccessDeniedHandler {offentlig statisk endelig Logger LOG = Logger.getLogger (CustomAccessDeniedHandler.class); @Override offentlig ugyldig håndtak (HttpServletRequest forespørsel, HttpServletResponse svar, AccessDeniedException exc) kaster IOException, ServletException {Authentication auth = SecurityContextHolder.getContext (). GetAuthentication (); hvis (auth! = null) {LOG.warn ("Bruker:" + auth.getName () + "forsøkte å få tilgang til den beskyttede URL:" + request.getRequestURI ()); } respons.sendRedirect (request.getContextPath () + "/ accessDenied"); }}

I sikkerhetskonfigurasjonen, vi definerer bønnen og angir tilpassingen AccessDeniedHandler:

@Bean public AccessDeniedHandler accessDeniedHandler () {returner nye CustomAccessDeniedHandler (); } // ... .exceptionHandling (). accessDeniedHandler (accessDeniedHandler ()); 

Hvis vi vil konfigurere CustomAccessDeniedHandler klasse definert ovenfor ved hjelp av XML, vil konfigurasjonen se litt annerledes ut:

4. Programkonfigurasjon

Håndtering av tilgang nektet feil kan gjøres gjennom web.xml fil til en webapplikasjon, ved å definere en feil-side stikkord. Dette inneholder to delmerker kalt feil kode, som spesifiserer statuskoden som skal avlyttes, og plassering, som betyr URL-en som brukeren vil bli omdirigert til i tilfelle feilkoden oppstår:

 403 / accessNektet 

Hvis en søknad ikke har en web.xml som i tilfelle Spring Boot, gir ikke Spring-merknadene et nøyaktig alternativ til feil-side stikkord. I følge vår-dokumentasjonen er den anbefalte tilnærmingen i dette tilfellet å bruke metodene accessDeniedPage () og accessDeniedHandler () presentert i avsnitt 3.

5. Konklusjon

I denne raske artikkelen har vi detaljert de forskjellige måtene som en tilgang nektet feil kan håndteres ved hjelp av en tilpasset 403-side.

Hele kildekoden til artikkelen finner du i GitHub-prosjektet.


$config[zx-auto] not found$config[zx-overlay] not found