Jarná bezpečnosť - prispôsobte si stránku 403 Zakázané / Prístup bol odmietnutý

1. Úvod

V tomto článku si ukážeme, ako na to prispôsobiť stránku odmietnutia prístupu v projekte Spring Security.

To sa dá dosiahnuť buď pomocou konfigurácie Spring Security alebo konfiguráciou webových aplikácií v serveri web.xml spis.

V ďalších častiach sa podrobnejšie pozrieme na každú z týchto možností.

2. Vlastné JSP

Kedykoľvek sa používateľ pokúsi získať prístup na stránku s obmedzením na roly, ktoré nemá, aplikácia vráti stavový kód 403, čo znamená Prístup zamietnutý.

Ak chcete nahradiť stránku stavu odpovede Spring 403 vlastnou, najskôr si vytvorme a JSP súbor s názvom accessDenied.jsp:

Ľutujeme, na zobrazenie tejto stránky nemáte oprávnenie.

Kliknite sem a späť na domovskú stránku.

3. Jarná konfigurácia zabezpečenia

V predvolenom nastavení má Spring Security ExceptionTranslationFilter definované, ktoré spracováva výnimky typu AuthenticationException a AccessDeniedException. To posledné sa deje prostredníctvom nehnuteľnosti zvanej accessDeniedHandler, ktorý používa AccessDeniedHandlerImpl trieda.

Aby sme mohli prispôsobiť toto správanie tak, aby používalo našu vlastnú stránku, ktorú sme vytvorili vyššie, musíme prepísať vlastnosti ExceptionTranslationFilter trieda. To je možné vykonať pomocou konfigurácie Java alebo XML.

3.1. Stránka zamietnutá

Pomocou Java, môžeme prispôsobiť proces spracovania chýb 403 pomocou accessDeniedPage () alebo accessDeniedHandler () metódy pri konfigurácii HttpSecurity element.

Vytvorme konfiguráciu autentifikácie, ktorá obmedzuje „/ Admin / **”URL na SPRÁVCA role a nastavuje stránku odmietnutia prístupu na našu zvyklosť accessDenied.jsp stránka:

@Override protected void configure (konečná HttpSecurity http) vyvolá výnimku {http // ... .and () .exceptionHandling (). AccessDeniedPage ("/ accessDenied.jsp"); }

Pozrime sa na ekvivalentnú konfiguráciu XML pre stránku s odmietnutím prístupu:

3.2. Handler odmietnutý prístup

Používanie obsluhy odmietnutej s prístupom namiesto stránky má výhodu v tom, že môžeme definovať vlastnú logiku, ktorá sa má vykonať pred presmerovaním na stránku 403. Pre to, musíme vytvoriť triedu, ktorá implementuje AccessDeniedHandler rozhranie a potlačí rukoväť () metóda.

Vytvorme si zvyk AccessDeniedHandler trieda, ktorá zaznamenáva varovnú správu pre každý pokus o odmietnutie prístupu obsahujúci používateľa, ktorý sa pokúsil vykonať, a chránenú adresu URL, ku ktorej sa pokúšali získať prístup:

verejná trieda CustomAccessDeniedHandler implementuje AccessDeniedHandler {public static final Logger LOG = Logger.getLogger (CustomAccessDeniedHandler.class); @Override public void handle (požiadavka HttpServletRequest, odpoveď HttpServletResponse, AccessDeniedException exc) hodí IOException, ServletException {Authentication auth = SecurityContextHolder.getContext (). GetAuthentication (); if (auth! = null) {LOG.warn ("User:" + auth.getName () + "sa pokúsil o prístup na chránenú adresu URL:" + request.getRequestURI ()); } response.sendRedirect (request.getContextPath () + "/ accessDenied"); }}

V konfigurácii zabezpečenia definujeme fazuľu a nastavíme zvyk AccessDeniedHandler:

@Bean public AccessDeniedHandler accessDeniedHandler () {vrátiť nový CustomAccessDeniedHandler (); } // ... .exceptionHandling (). accessDeniedHandler (accessDeniedHandler ()); 

Ak chceme nakonfigurovať CustomAccessDeniedHandler triedy definovanej vyššie pomocou XML, konfigurácia bude vyzerať trochu inak:

4. Konfigurácia aplikácie

Spracovanie chyby s odmietnutím prístupu je možné vykonať prostredníctvom servera web.xml súbor webovej aplikácie, definovaním chybová stránka značka. Toto obsahuje dve podznačky, ktoré sa nazývajú kód chyby, - ktorá určuje stavový kód, ktorý sa má zachytiť, a - umiestnenie, ktorá označuje adresu URL, na ktorú bude používateľ presmerovaný v prípade, že sa vyskytne chybový kód:

 403 / prístup Zamietnuté 

Ak žiadosť nemá a web.xml súboru, ako je to v prípade Spring Boot, anotácie jari v súčasnosti neposkytujú presnú alternatívu k súboru chybová stránka značka. Podľa jarnej dokumentácie sa v tomto prípade odporúča použitie metód accessDeniedPage () a accessDeniedHandler () uvedené v časti 3.

5. Záver

V tomto rýchlom článku sme podrobne opísali rôzne spôsoby, ako je možné vyriešiť chybu odmietnutia prístupu pomocou vlastnej stránky 403.

Kompletný zdrojový kód článku nájdete v projekte GitHub.


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