Spring Security (1) Formulario personalizado y autenticación y autorización

1. Autenticación de formulario predeterminada

  Cree un proyecto de arranque, dependiendo de:

<dependency> 
    <groupId> org.springframework.boot </groupId> 
    <artifactId> spring-boot-starter-web </artifactId> 
</dependency> 

<dependency> 
    <groupId> org.springframework.boot </groupId> 
    <artifactId > spring-boot-starter-security </artifactId> 
</dependency>

  Escribe un controlador de prueba

@RestController 
@RequestMapping ( "/ index" )
 clase pública  IndexController { 
    @RequestMapping ( "/ test1" )
     public String test1 (nombre de cadena, edad entera) {
         return "test1" ; 
    } 
}

  Inicie el proyecto, visite http: // localhost: 8089 / BootDemo / index / test1, aparece la autenticación de formulario predeterminada

 

 

   El nombre de usuario predeterminado es usuario, y la contraseña es un código aleatorio generado dinámicamente e impreso en la consola. Por supuesto, el nombre de usuario y la contraseña se pueden configurar en application.properties

spring.security.user.name = prueba 
spring.security.user.password = 123

 

2. Página de inicio de formulario personalizado

  Aunque la página de inicio del formulario que viene con Spring Security se puede iniciar rápida y fácilmente, la mayoría de las aplicaciones prefieren proporcionar su propia página de inicio del formulario. En este caso, debe personalizar la página de inicio del formulario.

 

 

   WebSecurityConfig

paquete com.oy; 

importar org.springframework.security.config.annotation.web.builders.HttpSecurity;
importar org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
importar org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 

@EnableWebSecurity 
public  class WebSecurityConfig extiende WebSecurityConfigurerAdapter { 

    @Override 
    protegido  void configure (HttpSecurity http) lanza Exception { 
        http.authorizeRequests (). AnyRequest (). Authenticated () .and ( ) .formLogin (). LoginPage (
            "/mylogin.html" ) 
            .loginProcessingUrl ( "/ login") // Especifique la ruta para procesar la solicitud de inicio de sesión. 
            permitAll () // La página de inicio de sesión y "/ login" no establecen permisos.y
             () .csrf (). disable ( ); 
    } 
}

  Página de inicio de formulario

<! DOCTYPE html> 
<html> 
<head> 
<meta charset = "UTF-8"> 
<title> Inserte el título aquí </title> 
</head> 
<body> 
<h2> 自 定义 表单 登陆 页 </h2> 
<form action = "login" method = "post"> 
用户 名 : <input type = "text" name = "username" /> <br/>  & nbsp; & nbsp; & nbsp; 码 : <input type = "text" nombre = "contraseña" /> <br/> 
<input type = "submit" value = "提交" /> 
</form> 
</body> 
</html>
Ver código

  Inicie el proyecto, visite localhost: 8089 / BootDemo / index / test1, y salte automáticamente a la página de inicio de sesión (la dirección del navegador es http: // localhost: 8089 / BootDemo / mylogin.html).

  Ingrese test / 123, inicie sesión correctamente, obtenga el resultado de la respuesta:

 

 

   Si ingresa un nombre de usuario o contraseña incorrectos, el resultado de la respuesta (código de estado 302, redirige a la página de inicio de sesión)

 

 

   En correspondencia con el proyecto donde el front-end y el back-end están separados, la redirección no necesita ser realizada por el back-end. El back-end generalmente devuelve datos json para informar al front-end si el inicio de sesión es exitoso o no. Esto también se puede lograr en Spring Security.

@EnableWebSecurity
 public  class WebSecurityConfig extiende WebSecurityConfigurerAdapter { 

    @Override 
    protegido  void configure (HttpSecurity http) lanza Exception { 
        http.authorizeRequests (). AnyRequest (). Authenticated (). And () 
            .formLogin (). LoginPage ( "/mylogin.html ) 
            .loginProcessingUrl ( "/ login") // Especifique la ruta para procesar la solicitud de inicio de sesión
             // Especifique la lógica de procesamiento cuando el inicio de sesión sea 
                exitoso.successHandler 
            ( new AuthenticationSuccessHandler () { 
@Override 
                public  voidonAuthenticationSuccess (solicitud HttpServletRequest, respuesta HttpServletResponse, 
                        autenticación de autenticación) arroja IOException, ServletException { 
                    response.setContentType ( "application / json; charset = utf-8" ); 
                    response.getWriter (). write ( "{\" code \ ": 0, \" data \ ": {}}" ); 
                } 
                
            }) 
            // 指定 登陆 失败 时 的 处理 逻辑 
            .failureHandler ( new AuthenticationFailureHandler () { 

                @Override 
                public  void onAuthenticationFailure (solicitud HttpServletRequest, respuesta HttpServletResponse, 
                        excepción AuthenticationException) tirosIOException, ServletException { 
                    response.setContentType ( "application / json; charset = utf-8" ); 
                    response.setStatus ( 401 ); 
                    response.getWriter (). write ( "{\" code \ ": 0, \" msg \ ": \" 用户 名 或 密码 错误 \ "}" ); 
                } 
                
            }) 
            
            .permitAll (). y () 
            .csrf (). disable (); 
    } 
}

  Entre ellos, el método successHandler () lleva un parámetro de autenticación, que contiene información como el nombre de usuario actualmente conectado y su función; y el método failureHandler () lleva un parámetro de excepción AuthenticationException.

 

3. Autenticación y autorización del modelo de base de datos personalizado.

  Se sigue el mecanismo de seguridad predeterminado de Spring Security: solo un usuario, solo un rol. En el desarrollo real, esto naturalmente no puede cumplir con los requisitos.

  Escriba tres controladores para la prueba. Entre ellos, el contenido bajo / admin / api está relacionado con la administración de fondo del sistema. Debe tener derechos de administrador (con el rol de "admin") para acceder; / user / api debe estar conectado y tener "user" "Rol de acceso.

@RestController 
@RequestMapping ( "/ admin / api" )
 clase pública  AdminController { 
    @GetMapping ( "/ hello" )
     public String hello () {
         return "hello, admin" ; 
    } 
} 
@RestController 
@RequestMapping ( "/ user / api" )
 public class UserController { 
    @GetMapping ( "/ hello" )
     public String hello () {
         return "hello, user" ; )
 public  class AppController { 
    @GetMapping ( "/ hello" )
     public String hello () {
         return "hello, app" ; 
    } 
}
Ver código

  Inicie el proyecto, visite http: // localhost: 8089 / BootDemo / user / api / hello, vaya a la página de inicio de sesión e inicie sesión con test / 123. Visite http: // localhost: 8089 / BootDemo / user / api / hello nuevamente, y el servidor devuelve 403 en este momento, lo que indica que la autorización del usuario ha fallado (401 representa la falla de autenticación del usuario).

  Modelo de base de datos personalizada

  

 

 

 

 

 

 

 

 

 

 

---

 

Supongo que te gusta

Origin www.cnblogs.com/xy-ouyang/p/12695264.html
Recomendado
Clasificación