Forårsikkerhed - Tilpas siden 403 Forbidden / Access Denied

1. Introduktion

I denne artikel vil vi vise, hvordan man gør det tilpas siden med nægtet adgang i et Spring Security-projekt.

Dette kan opnås enten via Spring Security-konfigurationen eller webapplikationskonfigurationen i web.xml fil.

I de resterende sektioner vil vi se nærmere på hver af disse muligheder.

2. Brugerdefineret JSP

Når en bruger forsøger at få adgang til en side, der er begrænset til roller, de ikke har, returnerer applikationen en statuskode på 403, hvilket betyder Adgang nægtet.

For at erstatte Spring 403-statusrespons-siden med en brugerdefineret side lad os først oprette en JSP fil kaldet accessDenied.jsp:

Beklager, du har ikke tilladelse til at se denne side.

Klik på her for at gå tilbage til hjemmesiden.

3. Forårssikkerhedskonfiguration

Spring Security har som standard en UndtagelseTranslationFilter defineret, som håndterer undtagelser af typen AuthenticationException og AccessDeniedException. Sidstnævnte sker gennem en ejendom, der kaldes adgangDeniedHandler, der bruger AccessDeniedHandlerImpl klasse.

For at tilpasse denne adfærd til at bruge vores egen side, som vi oprettede ovenfor, er vi nødt til at tilsidesætte egenskaberne for UndtagelseTranslationFilter klasse. Dette kan gøres via enten Java-konfiguration eller XML-konfiguration.

3.1. Adgang nægtet side

Brug af Java, vi kan tilpasse 403 fejlhåndteringsprocessen ved hjælp af accessDeniedPage () eller accessDeniedHandler () metoder mens du konfigurerer HttpSikkerhed element.

Lad os oprette en godkendelseskonfiguration, der begrænser “/ Admin / **”URL'er til ADMIN rolle og indstiller siden nægtet adgang til vores brugerdefinerede accessDenied.jsp side:

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

Lad os se på den ækvivalente XML-konfiguration for siden nægtet adgang:

3.2. Adgang nægtet håndterer

Brug af en adgang nægtet handler i stedet for en side har den fordel, at vi kan definere brugerdefineret logik, der skal udføres, før vi omdirigeres til 403-siden. For det, vi er nødt til at oprette en klasse, der implementerer AccessDeniedHandler interface og tilsidesætter håndtere() metode.

Lad os oprette en brugerdefineret AccessDeniedHandler klasse, der logger en advarselsmeddelelse for hvert forsøg på adgang nægtet, der indeholder den bruger, der foretog forsøget, og den beskyttede URL, de forsøgte at få adgang til:

offentlig klasse CustomAccessDeniedHandler implementerer AccessDeniedHandler {offentlig statisk endelig Logger LOG = Logger.getLogger (CustomAccessDeniedHandler.class); @Override offentligt ugyldigt håndtag (HttpServletRequest anmodning, HttpServletResponse svar, AccessDeniedException exc) kaster IOException, ServletException {Authentication auth = SecurityContextHolder.getContext (). GetAuthentication (); hvis (auth! = null) {LOG.warn ("Bruger:" + auth.getName () + "forsøgte at få adgang til den beskyttede URL:" + request.getRequestURI ()); } respons.sendRedirect (request.getContextPath () + "/ accessDenied"); }}

I sikkerhedskonfigurationen vi definerer bønnen og indstiller brugerdefineret AccessDeniedHandler:

@Bean offentlig AccessDeniedHandler accessDeniedHandler () {returner ny CustomAccessDeniedHandler (); } // ... .exceptionHandling (). accessDeniedHandler (accessDeniedHandler ()); 

Hvis vi vil konfigurere CustomAccessDeniedHandler klasse defineret ovenfor ved hjælp af XML, vil konfigurationen se lidt anderledes ud:

4. Konfiguration af applikation

Håndtering af adgang nægtet fejl kan gøres via web.xml fil til en webapplikation ved at definere en fejl-side tag. Dette indeholder to undertags kaldet Fejlkode, der specificerer den statuskode, der skal opfanges, og Beliggenhed, som angiver den URL, som brugeren vil blive omdirigeret til, hvis der opstår fejlkoden:

 403 / adgang Afvist 

Hvis en ansøgning ikke har en web.xml filen, som det er tilfældet med Spring Boot, giver Spring-kommentarerne i øjeblikket ikke et nøjagtigt alternativ til fejl-side tag. I henhold til Spring-dokumentationen er den anbefalede fremgangsmåde i dette tilfælde at bruge metoderne accessDeniedPage () og accessDeniedHandler () præsenteret i afsnit 3.

5. Konklusion

I denne hurtige artikel har vi detaljeret de forskellige måder, hvorpå en adgang nægtet fejl kan håndteres ved hjælp af en brugerdefineret 403-side.

Den komplette kildekode for artiklen kan findes i GitHub-projektet.