Spring Security - Passen Sie die Seite 403 Forbidden/Access Denied an

Frühjahrssicherheit - Passen Sie die Seite 403 Verboten / Zugriff verweigert an

1. Einführung

In diesem Artikel zeigen wir, wie mancustomize the access denied page in a Spring Security project macht.

Dies kann entweder über die Spring Security-Konfiguration oder die Webanwendungskonfiguration in der Dateiweb.xmlerreicht werden.

In den verbleibenden Abschnitten werden wir uns eingehender mit jeder dieser Optionen befassen.

2. Benutzerdefinierte JSP

Wenn ein Benutzer versucht, auf eine Seite zuzugreifen, die auf Rollen beschränkt ist, die er nicht hat, gibt die Anwendung den Statuscode 403 zurück, wasAccess Denied bedeutet.

Um die Antwortantwortseite für Spring 403 durch eine benutzerdefinierte Seite zu ersetzen,let’s first create a JSP file called accessDenied.jsp:


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

Click ">here to go back to the Homepage.

3. Spring-Sicherheitskonfiguration

Standardmäßig ist in Spring Security einExceptionTranslationFilterdefiniert, das Ausnahmen vom TypAuthenticationExceptionundAccessDeniedExceptionbehandelt. Letzteres erfolgt über eine Eigenschaft namensaccessDeniedHandler,, die die KlasseAccessDeniedHandlerImpl verwendet.

Um dieses Verhalten so anzupassen, dass unsere eigene Seite verwendet wird, die wir oben erstellt haben, müssen wir die Eigenschaften der KlasseExceptionTranslationFilterüberschreiben. Dies kann entweder über die Java-Konfiguration oder die XML-Konfiguration erfolgen.

3.1. Zugriff auf verweigerte Seite

Verwenden Sie Java, umwe can customize the 403 error handling process by using the accessDeniedPage() or accessDeniedHandler() methods zu konfigurieren, während Sie das ElementHttpSecurity konfigurieren.

Erstellen Sie eine Authentifizierungskonfiguration, die die URLs von“/admin/** auf die Rolle vonADMINbeschränkt und die Seite mit verweigertem Zugriff auf unsere benutzerdefinierte Seite vonaccessDenied.jspetzt:

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

Werfen wir einen Blick auf die entsprechende XML-Konfiguration für die Seite "Zugriff verweigert":


    
 

3.2. Zugriff verweigert Handler

Die Verwendung eines Zugriffsverweigerungshandlers anstelle einer Seite hat den Vorteil, dass Sie eine benutzerdefinierte Logik definieren können, die ausgeführt werden soll, bevor Sie zur Seite 403 umleiten. Dazu s%(t0)s und überschreibt die Methodehandle().

Erstellen Sie eine benutzerdefinierteAccessDeniedHandler-Klasse, die eine Warnmeldung für jeden fehlgeschlagenen Zugriffsversuch protokolliert, die den Benutzer, der den Versuch ausgeführt hat, und die geschützte URL enthält, auf die sie zugreifen wollten:

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

In der Sicherheitskonfigurationwe’ll define the bean and set the custom AccessDeniedHandler:

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

//...
.exceptionHandling().accessDeniedHandler(accessDeniedHandler());

Wenn wir die oben definierteCustomAccessDeniedHandler-Klasse mithilfe von XML konfigurieren möchten, sieht die Konfiguration etwas anders aus:




    

4. Anwendungskonfiguration

Handling the access denied error can be done through the web.xml file of a web application, by defining an error-page tag. Enthält zwei Untertags namenserror-code,, die den abzufangenden Statuscode angeben, undlocation,, der die URL angibt, zu der der Benutzer umgeleitet wird, falls der Fehlercode auftritt:


    403
    /accessDenied

Wenn eine Anwendung keineweb.xml-Datei hat, wie dies bei Spring Boot der Fall ist, bieten die Spring-Anmerkungen derzeit keine exakte Alternative zumerror-page-Tag. Gemäß der Spring-Dokumentation besteht in diesem Fall der empfohlene Ansatz darin, die in Abschnitt 3 vorgestellten MethodenaccessDeniedPage() undaccessDeniedHandler() zu verwenden.

5. Fazit

In diesem kurzen Artikel haben wir die verschiedenen Möglichkeiten beschrieben, wie ein Fehler bei der Zugriffsverweigerung mithilfe einer benutzerdefinierten 403-Seite behandelt werden kann.

Den vollständigen Quellcode des Artikels finden Sie inGitHub project.