Vårsäkerhet - Anpassa sidan 403 förbjuden / åtkomst nekad

1. Introduktion

I den här artikeln kommer vi att visa hur du anpassar sidan nekad åtkomst i ett Spring Security-projekt .

Detta kan uppnås antingen genom Spring Security-konfigurationen eller webbapplikationskonfigurationen i web.xml- filen.

I de återstående avsnitten kommer vi att ta en djupare titt på vart och ett av dessa alternativ.

2. Anpassad JSP

När en användare försöker komma åt en sida som är begränsad till roller de inte har, kommer applikationen att returnera en statuskod på 403, vilket betyder åtkomst nekad .

För att ersätta vårens 403-svarsida med en anpassad, låt oss först skapa en JSP- fil som heter accessDenied.jsp :

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

Click here to go back to the Homepage.

3. Vårens säkerhetskonfiguration

Som standard har Spring Security en ExceptionTranslationFilter definierad som hanterar undantag av typen AuthenticationException och AccessDeniedException . Det senare görs via en egendom som heter accessDeniedHandler, som använder AccessDeniedHandlerImpl- klassen.

För att anpassa detta beteende för att använda vår egen sida som vi skapade ovan måste vi åsidosätta egenskaperna för klassen ExceptionTranslationFilter . Detta kan göras antingen genom Java-konfiguration eller XML-konfiguration.

3.1. Åtkomst nekad sida

Med Java kan vi anpassa 403-felhanteringsprocessen med hjälp av accessDeniedPage () eller accessDeniedHandler () -metoderna medan vi konfigurerar HttpSecurity- elementet.

Låt oss skapa en autentiseringskonfiguration som begränsar “/ admin / ** ” URL: er till ADMIN- rollen och ställer in åtkomst nekad sida till vår anpassade accessDenied.jsp- sida:

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

Låt oss ta en titt på motsvarande XML-konfiguration för åtkomst nekad sida:

3.2. Åtkomst nekad hanterare

Att använda en åtkomst nekad hanterare istället för en sida har fördelen att vi kan definiera anpassad logik som ska köras innan vi omdirigerar till 403-sidan. För detta måste vi skapa en klass som implementerar AccessDeniedHandler- gränssnittet och åsidosätter handtag () -metoden.

Låt oss skapa en anpassad AccessDeniedHandler- klass som loggar ett varningsmeddelande för varje åtkomst nekat försök som innehåller användaren som gjorde försöket och den skyddade URL som de försökte komma åt:

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"); } }

I säkerhetskonfigurationen definierar vi bönan och ställer in den anpassade AccessDeniedHandler :

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

Om vi ​​vill konfigurera klassen CustomAccessDeniedHandler som definierats ovan med XML, ser konfigurationen lite annorlunda ut:

4. Programkonfiguration

Hantera åtkomst nekad fel kan göras genom web.xml fil av en webbapplikation, genom att definiera ett fel-sida tag. Den innehåller två undertaggar som kallas felkod, som anger statuskoden som ska avlyssnas och plats, vilket betyder den URL som användaren kommer att omdirigeras till om felkoden stöter på:

 403 /accessDenied 

Om ett program inte har en web.xml fil, som är fallet med Spring Boot som behöver vårens anteckningar för närvarande inte ge en exakt alternativ till fel sidor tag. Enligt vårdokumentationen är i detta fall det rekommenderade tillvägagångssättet att använda metoderna accessDeniedPage () och accessDeniedHandler () som presenteras i avsnitt 3.

5. Sammanfattning

I den här snabba artikeln har vi detaljerat de olika sätten att ett åtkomst nekat fel kan hanteras med en anpassad 403-sida.

Den fullständiga källkoden för artikeln finns i GitHub-projektet.