Spring Security - Pas de pagina 403 Forbidden / Access Denied aan

1. Inleiding

In dit artikel laten we zien hoe u dat doet de toegang geweigerde pagina aanpassen in een Spring Security-project.

Dit kan worden bereikt via de Spring Security-configuratie of de configuratie van de webtoepassing in het web.xml het dossier.

In de overige secties gaan we dieper in op elk van deze opties.

2. Aangepaste JSP

Telkens wanneer een gebruiker probeert toegang te krijgen tot een pagina die beperkt is tot rollen die hij niet heeft, retourneert de applicatie de statuscode 403, wat betekent Toegang geweigerd.

Om de Spring 403-statusresponspagina te vervangen door een aangepaste pagina, laten we eerst een JSP bestand genaamd accessDenied.jsp:

Sorry, u heeft geen toestemming om deze pagina te bekijken.

Klik hier om terug te gaan naar de homepage.

3. Lente-beveiligingsconfiguratie

Spring Security heeft standaard een ExceptionTranslationFilter gedefinieerd welke uitzonderingen van het type afhandelt AuthenticationException en AccessDeniedException. Dit laatste gebeurt via een eigenschap genaamd accessDeniedHandler, die de AccessDeniedHandlerImpl klasse.

Om dit gedrag aan te passen om onze eigen pagina te gebruiken die we hierboven hebben gemaakt, moeten we de eigenschappen van het ExceptionTranslationFilter klasse. Dit kan worden gedaan via Java-configuratie of XML-configuratie.

3.1. Toegang geweigerd pagina

Java gebruiken, we kunnen het 403-foutafhandelingsproces aanpassen door de accessDeniedPage () of accessDeniedHandler () methoden tijdens het configureren van het HttpSecurity element.

Laten we een authenticatieconfiguratie maken die het "/beheerder/**”URL's naar het BEHEERDER role en stelt de pagina met geweigerde toegang in op onze aangepaste accessDenied.jsp bladzijde:

@Override protected void configure (laatste HttpSecurity http) gooit uitzondering {http // ... .and () .exceptionHandling (). AccessDeniedPage ("/ accessDenied.jsp"); }

Laten we eens kijken naar de equivalente XML-configuratie voor de pagina met geweigerde toegang:

3.2. Toegang geweigerd handler

Het gebruik van een toegang geweigerde handler in plaats van een pagina heeft het voordeel dat we aangepaste logica kunnen definiëren die moet worden uitgevoerd voordat we doorverwijzen naar de 403-pagina. Voor deze, we moeten een klasse maken die de AccessDeniedHandler koppel en overschrijft de handvat() methode.

Laten we een custom maken AccessDeniedHandler klasse die een waarschuwingsbericht registreert voor elke poging tot geweigerde toegang, met daarin de gebruiker die de poging heeft gedaan en de beschermde URL die ze probeerden te openen:

openbare klasse CustomAccessDeniedHandler implementeert AccessDeniedHandler {openbare statische definitieve Logger LOG = Logger.getLogger (CustomAccessDeniedHandler.class); @Override public void handle (HttpServletRequest request, HttpServletResponse response, AccessDeniedException exc) gooit IOException, ServletException {Authentication auth = SecurityContextHolder.getContext (). GetAuthentication (); if (auth! = null) {LOG.warn ("Gebruiker:" + auth.getName () + "probeerde toegang te krijgen tot de beschermde URL:" + request.getRequestURI ()); } response.sendRedirect (request.getContextPath () + "/ accessDenied"); }}

In de beveiligingsconfiguratie we zullen de boon definiëren en de aangepaste instellen AccessDeniedHandler:

@Bean openbare AccessDeniedHandler accessDeniedHandler () {retourneer nieuwe CustomAccessDeniedHandler (); } // ... .exceptionHandling (). accessDeniedHandler (accessDeniedHandler ()); 

Als we het CustomAccessDeniedHandler klasse die hierboven is gedefinieerd met behulp van XML, zal de configuratie er iets anders uitzien:

4. Applicatieconfiguratie

Het afhandelen van de toegang geweigerde fout kan worden gedaan via het web.xml bestand van een webapplicatie, door een foutpagina label. Dit bevat twee subtags genaamd foutcode, die de statuscode specificeert die moet worden onderschept, en plaats, wat de URL aangeeft waarnaar de gebruiker wordt omgeleid in het geval dat de foutcode wordt aangetroffen:

 403 / accessDenied 

Als een applicatie geen web.xml , zoals het geval is met Spring Boot, bieden de Spring-annotaties momenteel geen exact alternatief voor het error-pagina label. Volgens de Spring-documentatie is in dit geval de aanbevolen aanpak om de methoden te gebruiken accessDeniedPage () en accessDeniedHandler () gepresenteerd in sectie 3.

5. Conclusie

In dit korte artikel hebben we de verschillende manieren beschreven waarop een toegang geweigerd-fout kan worden afgehandeld met behulp van een aangepaste 403-pagina.

De volledige broncode van het artikel is te vinden in het GitHub-project.


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