Esencia de interceptor Spring Boot

No somos ajenos a los interceptores. Tanto Struts 2 como Spring MVC proporcionan funciones de interceptor, que pueden interceptar solicitudes basadas en URL, y se utilizan principalmente en la verificación de inicio de sesión, verificación de autoridad, resolución de código ilegible, monitoreo de rendimiento y manejo de excepciones y otras funciones. Spring Boot también proporciona funcionalidad de interceptor.

En un proyecto de Spring Boot, el uso de la función de interceptor generalmente requiere los siguientes tres pasos:
definir el interceptor,
registrar el interceptor,
especificar las reglas de interceptación (si se interceptan todos, los recursos estáticos también se interceptarán).
Definición de interceptores
Definir interceptores en Spring Boot es muy simple, simplemente cree una clase de interceptor e implemente la interfaz HandlerInterceptor.

Los siguientes tres métodos se definen en la interfaz HandlerInterceptor, como se muestra en la siguiente tabla.
inserte la descripción de la imagen aquí
Ejemplo 1
Tome el proyecto spring-boot-adminex como ejemplo. Cree una clase de interceptor llamada LoginInterceptor en net.biancheng.www.componet para interceptar el inicio de sesión. El código es el siguiente.
paquete net.biancheng.www.componet;
importar lombok.extern.slf4j.Slf4j;
importar org.springframework.web.servlet.HandlerInterceptor;
importar org.springframework.web.servlet.ModelAndView;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
@Slf4j
clase pública LoginInterceptor implementa HandlerInterceptor { /** * Antes de que se ejecute el método objetivo * * @param request * @param response * @param handler * @return * @throws Exception /









@Override
public boolean preHandle (solicitud de HttpServletRequest, respuesta de HttpServletResponse, controlador de objetos) arroja una excepción { Object loginUser = request.getSession().getAttribute(“loginUser”); if (loginUser == null) { //no inició sesión, regrese a página de inicio de sesión request.setAttribute("msg", "No tiene permiso para realizar esta operación, inicie sesión primero!"); request.getRequestDispatcher("/index.html").forward(solicitud, respuesta); return false ; } else { // Release return true; } } /











*
* Después de ejecutar el método de destino
*
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
/
@Override
public void postHandle (solicitud HttpServletRequest, respuesta HttpServletResponse, controlador de objetos, ModelAndView modelAndView) arroja una excepción { log.info ("postHandle execute {}", modelAndView); } /


*
* Después de que se represente la página
*
* @param request
* @param respuesta
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion (solicitud HttpServletRequest, respuesta HttpServletResponse, controlador de objetos, excepción ex) throws Exception { log.info ("excepción de ejecución afterCompletion {}", ex) ; } } interceptor de registro




Cree una clase de configuración que implemente la interfaz WebMvcConfigurer (una clase anotada con @Configuration), invalide el método addInterceptors() y llame al método registration.addInterceptor() en este método para registrar el interceptor personalizado en el contenedor.
Ejemplo 2
En la clase de configuración MyMvcConfig, agregue el siguiente método para registrar el interceptor, el código es el siguiente.
@Configuration
public class MyMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry Registry) { Registry.addInterceptor(new LoginInterceptor()); } } Especificar las reglas de interceptación Modificar el código del método addInterceptors() en la clase de configuración MyMvcConfig y continuar especificando el interceptor Las reglas de interceptación, el código es el siguiente. @Slf4j @Configuration clase pública MyMvcConfig implementa WebMvcConfigurer { @Override public void addInterceptors(Registro de InterceptorRegistry) {














log.info("Registration Interceptor");
Registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/ ") //Interceptar todas las solicitudes, incluidos los archivos de recursos estáticos.excludePathPatterns
("/", "/login", " / index.html", "/user/login", "/css/
", "/images/ ", "/js/ ", "/fonts/**"); //Liberar página de inicio de sesión, operación de inicio de sesión, recurso estático
}
}

Cuando se especifican las reglas de intercepción del interceptor, se llaman dos métodos. La descripción de estos dos métodos es la siguiente:
addPathPatterns: este método se utiliza para especificar la ruta de intercepción. Por ejemplo, la ruta de intercepción es "/**", lo que significa interceptar todas las solicitudes, incluida la solicitud de recursos estáticos.
excluirPathPatterns: este método se usa para excluir rutas de intercepción, es decir, especificar solicitudes que no necesitan ser interceptadas por el interceptor.

Hasta ahora, las funciones básicas del interceptor se han completado. A continuación, primero implementamos la función de inicio de sesión de spring-boot-adminex para preparar la interceptación de inicio de sesión de verificación.

Darse cuenta de la función de inicio de sesión

  1. Cambie el nombre de index.html en la plantilla de AdminEx a main.html y muévalo a src/main/resources/templates, como se muestra en la siguiente figura.

inserte la descripción de la imagen aquí

Figura 1: página principal

  1. Cree un LoginController en tangyu9880.controller y agregue el método doLogin() para procesar la solicitud de inicio de sesión, el código es el siguiente.
    paquete tangyu9880.controller;
    import lombok.extern.slf4j.Slf4j;
    import tangyu9880.bean.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation. GetMapping;
    importar org.springframework.web.bind.annotation.PostMapping;
    importar org.springframework.web.bind.annotation.RequestMapping;
    importar javax.servlet.http.HttpSession;
    importar java.util.Map;
    @Slf4j
    @Controller
    clase pública LoginController { @RequestMapping("/usuario/inicio de sesión")

    public String doLogin(User user, Map<String, Object> map, HttpSession session) { if (user != null && StringUtils.hasText(user.getUsername()) && “123456”.equals(user.getPassword())) { session.setAttribute("loginUser", usuario); log.info("Inicio de sesión exitoso, nombre de usuario:" + usuario.getUsername()); //Evitar envíos repetidos usando la redirección return "redirect:/main.html"; } else { map.put("msg", "Usuario o contraseña incorrectos"); log.error("Inicio de sesión fallido"); return "inicio de sesión"; } } /* @RequestMapping("/main.html") public String mainPage( ){ devuelve "principal"; }*/ }
















  2. Agregue el mapeo de vistas en la clase de configuración MyMvcConfig, el código es el siguiente.
    @Configuration
    clase pública MyMvcConfig implementa WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registro) { //Al visitar "/" o "/index.html", vaya directamente a la página de inicio de sesión registration.addViewController("/"). setViewName( "login"); Registry.addViewController("/index.html").setViewName("login"); //Agregar mapeo de vistas main.html apuntando a dashboard.html Registry.addViewController(“/main.html”). setViewName ("principal"); } ... }









  3. Agregue el siguiente código en el lugar apropiado de login.html para mostrar el mensaje de error.

Verifique el inicio de sesión y la función de intercepción de inicio de sesión 1. Inicie Spring Boot y acceda directamente a la página de inicio a través de "http://localhost:8080/main.html" sin iniciar sesión, el resultado es como se muestra en la figura a continuación. ![Insertar descripción de la imagen aquí](https://img-blog.csdnimg.cn/676e3a413b6b485faf2439d79e5fcac3.png)

Intercepción de inicio de sesión
Figura 1: El inicio de sesión es interceptado

  1. Ingrese "admin" y "admin123" respectivamente en los cuadros de entrada de nombre de usuario y contraseña en la página de inicio de sesión, y haga clic en el botón de inicio de sesión a continuación, el resultado es como se muestra en la figura a continuación.
    inserte la descripción de la imagen aquí

Inicio de sesión fallido
Figura 2: Inicio de sesión fallido

  1. Ingrese "admin" y "123456" respectivamente en los cuadros de entrada de nombre de usuario y contraseña en la página de inicio de sesión, y haga clic en el botón de inicio de sesión a continuación, el resultado es como se muestra en la figura a continuación.
    inserte la descripción de la imagen aquí

Aterrizó con éxito

Supongo que te gusta

Origin blog.csdn.net/weixin_64842782/article/details/125106848
Recomendado
Clasificación