SpringBoot: utilice el interceptor HandlerInterceptor para acceder
Completado
Escenarios de aplicación
1. Registro, que puede registrar la información de la solicitud en el registro para monitoreo de información, estadísticas de información, etc.
2. Verificación de permisos: por ejemplo, detección de inicio de sesión, ingrese al procesador para detectar si ha iniciado sesión y regrese directamente a la página de inicio de sesión si no ha iniciado sesión.
3. Monitoreo del rendimiento: registros generalmente lentos.
Creo que todo el mundo está familiarizado con los interceptores. Los más utilizados son la interceptación de inicio de sesión, la verificación de permisos, la prevención de envíos repetidos o la verificación de la hora del ticket según el negocio como 12306. En resumen, puede hacer muchas cosas.
El método para definir un interceptor es muy simple. Hay varias formas. Aquí enumeraré brevemente dos.
1. La clase implementa la interfaz HandlerInterceptor. > 2. La clase hereda la clase que implementa la interfaz HandlerInterceptor. Por ejemplo, se ha proporcionado una clase que implementa la interfaz HandlerInterceptor. Clase abstracta de interfaz HandlerInterceptor HandlerInterceptorAdapter
preHandle: se llama antes de que el procesador de negocios procese la solicitud. El preprocesamiento permite codificación, controles de seguridad, comprobaciones de permisos, etc.
postHandle: se ejecuta después de que el procesador de negocio procesa la solicitud y antes de generar la vista. Postprocesamiento (llamar al servicio y devolver ModelAndView, pero no realizar la representación de la página), existe la posibilidad de modificar ModelAndView (este blogger básicamente no lo usa
afterCompletion: se llama después de que DispatcherServlet se haya procesado por completo); la solicitud, se puede utilizar para limpiar recursos, etc. Volver al procesamiento (página renderizada);
-------------
Entonces, en nuestro negocio, por ejemplo, para registrar los registros del sistema, usted debe registrar el registro después de la finalización; de lo contrario, también se registrará una falla en el medio, lo cual es una tontería. Debemos registrar los registros de adiciones, eliminaciones y modificaciones a la base de datos en la base de datos mientras el programa se ejecuta normalmente. Por lo tanto, solo necesitamos heredar HandlerInterceptorAdapter y anular el método afterCompletion porque el valor predeterminado de preHandle es verdadero.
El proceso de ejecución se resume a continuación:
1. El orden de ejecución de los interceptores es consistente con el orden definido en el archivo de configuración de Spring.
2. Todos los interceptores se ejecutarán en el orden del método preHandle hasta que devuelva falso. Por ejemplo, si el segundo método preHandle devuelve falso, entonces el tercer interceptor y todos los posteriores no se ejecutarán. Si todos devuelven verdadero, los métodos preHandle se cargan en orden.
3. Luego ejecute el método principal (su propia interfaz de controlador). Si se lanza una excepción en el medio, el efecto es el mismo que devolver falso y postHandle no continuará ejecutándose, pero sí. solo se ejecutará en el orden inverso al método afterCompletion.
4. Después de que el método principal haya ejecutado la lógica empresarial (la página aún no ha mostrado datos), ejecute el método postHandle en orden inverso. Si el método preHandle del tercer interceptor devuelve falso, se ejecutan el segundo y primer método postHandle y el método afterCompletion (postHandle se ejecuta antes de este, es decir, después de que la página representa los datos, se ejecuta el trabajo de limpieza posterior). (El orden de ejecución de postHandle y afterCompletion se invierte.
)
La clase de configuración WebMvcConfigurer es en realidad un método de configuración dentro de Spring. Utiliza JavaBean para reemplazar el archivo de configuración xml tradicional y se usa para personalizar el marco. Puede personalizar múltiples controladores, Interceptor, ViewResolver, MessageConverter. El método de configuración Spring mvc basado en Java necesita crear una clase de configuración e implementar la interfaz WebMvcConfigurer.
En Spring Boot versión 1.5, la interfaz WebMvcConfigurer se puede reescribir. Método WebMvcConfigurerAdapter para agregar interceptores personalizados, convertidores de mensajes, etc. Esta clase ha sido marcada como @Deprecated desde SpringBoot 2.0. La recomendación oficial es implementar directamente WebMvcConfigurer o heredar directamente WebMvcConfigurationSupport, implementar la interfaz WebMvcConfigurer (recomendado) o heredar la clase WebMvcConfigurationSupport
Implementar el método de la interfaz WebMvcConfigurer. fuerte> Métodos de uso común:
En el pasado, al escribir SpringMVC, si necesitaba acceder a la página, tenía que escribir una clase de Controlador y luego escribir un método para saltar a la página. como si fuera muy problemático reescribirlo. El método addViewControllers en WebMvcConfigurer puede lograr el efecto
Vale la pena señalar que anular el método addViewControllers aquí no anulará el método WebMvcAutoConfiguration en WebMvcAutoConfiguration. addViewControllers (en este método, Spring Boot asigna "/" a index.html), lo que significa que su propia configuración y la configuración automática de Spring Boot son válidas al mismo tiempo. Esta es la forma recomendada de agregar su propia configuración MVC. Esta es la forma recomendada de agregar su propia configuración MVC.
Por ejemplo, si queremos personalizar el directorio de mapeo de recursos estáticos, solo necesitamos anular el método addResourceHandlers.
Nota: si hereda la clase WebMvcConfigurationSupport, debe anular este método; consulte otros artículos.
En este punto, registrará un controlador predeterminado: DefaultServletHttpRequestHandler, que también se utiliza como proceso. archivos estáticos. Este controlador también se utiliza para manejar archivos estáticos, intentará asignar /. Cuando DispatcherServelt se asigna a / (hay una diferencia entre / y /), pero no encuentra un controlador adecuado para manejar la solicitud, la solicitud se entregará a DefaultServletHttpRequestHandler para su procesamiento. Nota: los recursos estáticos se colocan en el directorio raíz del sitio web, no en WEB-INF.
Tal vez la descripción aquí sea un poco difícil de entender (yo creo que sí), así que dé un ejemplo simple, por ejemplo: Hay una imagen en el directorio webroot: 1.png Sabemos que la web root en la especificación de Servelt Se puede acceder directamente a los archivos en el directorio (webroot), pero dado que la ruta de mapeo configurada por DispatcherServlet es /, intercepta casi todas las solicitudes, lo que hace que 1.png sea inaccesible. En este momento, se puede registrar un DefaultServletHttpRequestHandler. resolver este problema.
De hecho, se puede entender que DispatcherServlet destruye una característica del Servlet (se puede acceder directamente a los archivos en el directorio raíz) y DefaultServletHttpRequestHandler ayuda a restaurar esta característica.
Este método se utiliza para configurar el solucionador de vistas. El parámetro ViewResolverRegistry es un registro que se utiliza para registrar el solucionador de vistas para personalizarlo, etc. Métodos comunes de ViewResolverRegistry: