Spring Security: 403 Zugriff verweigerte Seite anpassen

Frühlingssicherheit: Passen Sie die Seite 403 "Zugriff verweigert" an

Wenn in Spring Security nicht autorisierte Benutzer versuchen, auf eine geschützte Seite zuzugreifen, wird standardmäßig "http 403 access denied" angezeigt:

spring-security-403-default

In diesem Tutorial zeigen wir Ihnen, wie Sie die Seite mit 403 verweigerten Zugriffen in Spring Security anpassen können.

1. Spring-Sicherheitskonfiguration

Überprüfen Sie eine Konfiguration. Wenn "alex" versucht, auf die Seite von/adminzuzugreifen, wird die Seite über 403 Zugriff verweigert angezeigt.

Spring-Security.xml

  
    
    
  

  
    
      
        
        
      
    
  

2. Lösung - Anpassen von 403 Page

2.1 Create a new 403 page.

403.jsp



    

HTTP Status 403 - Access is denied

${msg}

2.2. Fügen Sie zum Anzeigen der obigen Seiteerror-pagewie folgt hinzu:

Spring-Security.xml

    
        
        
    

2.3 In a controller class, add a mapping for “/403” url :

HelloController.java

package com.example.web.controller;

import java.security.Principal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

    // for 403 access denied page
    @RequestMapping(value = "/403", method = RequestMethod.GET)
    public ModelAndView accesssDenied(Principal user) {

        ModelAndView model = new ModelAndView();

        if (user != null) {
            model.addObject("msg", "Hi " + user.getName()
            + ", you do not have permission to access this page!");
        } else {
            model.addObject("msg",
            "You do not have permission to access this page!");
        }

        model.setViewName("403");
        return model;

    }

}

Erledigt.

Verwenden Sie für Benutzer mit Anmerkungen diese.exceptionHandling().accessDeniedPage("/403").

SecurityConfig.java

package com.example.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

     http.authorizeRequests()
        .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
        .and().formLogin()
        .loginPage("/login").failureUrl("/login?error")
        .usernameParameter("username")
        .passwordParameter("password")
        .and().logout().logoutSuccessUrl("/login?logout")
        .and()
        .exceptionHandling().accessDeniedPage("/403")
    }
}

3. AccessDeniedHandler

Darüber hinaus können Sie ein benutzerdefiniertesAccessDeniedHandlererstellen, um einige Geschäftslogiken auszuführen, bevor Sie die URL an die Zuordnung von/403übergeben.

MyAccessDeniedHandler.java

package com.example.web.exception;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;

public class MyAccessDeniedHandler implements AccessDeniedHandler {

    private String errorPage;

    public MyAccessDeniedHandler() {
    }

    public MyAccessDeniedHandler(String errorPage) {
        this.errorPage = errorPage;
    }

    public String getErrorPage() {
        return errorPage;
    }

    public void setErrorPage(String errorPage) {
        this.errorPage = errorPage;
    }

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response,
        AccessDeniedException accessDeniedException)
                throws IOException, ServletException {

        //do some business logic, then redirect to errorPage url
        response.sendRedirect(errorPage);

    }

}

Fügen Sie dem http-Tag einref hinzu.

Spring-Security.xml

    
        
        
    

    
        
    

Erledigt.

4. Demo

Wenn "alex" versucht, auf die Seite von/adminzuzugreifen, wird über dem Anpassen der Seite "403 Zugriff verweigert" angezeigt.

4.1 If using error-page, url will be displayed like this :

spring-security-403-example1

4.2 If using custom access denied handler ref, url will be displayed like this :

spring-security-403-example2

Quellcode herunterladen

Laden Sie es herunter -spring-security-403-access-denied.zip (26 KB)