Extensión de ensamblaje WebMvc

Introducción

La clase de configuración WebMvcConfigurer es en realidad un Springmétodo de configuración interno. Utiliza JavaBeanun formulario para reemplazar el xmlformulario de archivo de configuración tradicional para personalizar el marco. Puede personalizar algunos Handler, Interceptor, ViewResolver y MessageConverter. Para la configuración de Spring MVC basada en el modo basado en Java, necesita crear una clase de configuración e implementar la WebMvcConfigurerinterfaz ** **;

WebMvcAutoConfiguration es la clase de configuración automática de WebMvc, que configura algunos archivos sobre proyectos web, y WebMvcConfigurer es una interfaz, que se utiliza para complementar la clase de configuración automática WebMvcAutoConfiguration, lo que significa que si hay lugares que no se consideran en WebMvcAutoConfiguration, se puede extender a través de la interfaz WebMvcConfigurer .

Interfaz WebMvcConfigurer

public interface WebMvcConfigurer {
    default void configurePathMatch(PathMatchConfigurer configurer) {
    }
    default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    }
    default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
    }
    default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    }
    default void addFormatters(FormatterRegistry registry) {
    }
    default void addInterceptors(InterceptorRegistry registry) {
    }
    default void addResourceHandlers(ResourceHandlerRegistry registry) {
    }
    default void addCorsMappings(CorsRegistry registry) {
    }
    default void addViewControllers(ViewControllerRegistry registry) {
    }
    default void configureViewResolvers(ViewResolverRegistry registry) {
    }
    default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
    }
    default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
    }
    default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    }
    default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    }
    default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    }
    default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
    }
    @Nullable
    default Validator getValidator() {
        return null;
    }
    @Nullable
    default MessageCodesResolver getMessageCodesResolver() {
        return null;
    }
}

formas de uso común:

 /* 拦截器配置 */
void addInterceptors(InterceptorRegistry var1);
/* 视图跳转控制器 */
void addViewControllers(ViewControllerRegistry registry);
/**
     *静态资源处理
**/
void addResourceHandlers(ResourceHandlerRegistry registry);
/**
     * 这里配置视图解析器
 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;

addInterceptors: interceptor

Primero, debe escribir una clase de interceptor como se muestra a continuación

Inserte la descripción de la imagen aquí

Luego, debe escribir un fragmento de código en el método addInterceptors en la clase de extensión springmvc, como se muestra a continuación

Inserte la descripción de la imagen aquí

Finalmente está la fase de prueba:

Inserte la descripción de la imagen aquí

  • addInterceptor: necesita una instancia de interceptor que implemente la interfaz HandlerInterceptor
  • addPathPatterns: se utiliza para establecer las reglas addPathPatterns("/**")de la ruta del filtro del interceptor ; interceptar todas las solicitudes
  • excludePathPatterns: se utiliza para establecer reglas de filtrado que no necesitan ser interceptadas
  • El propósito principal del interceptor: interceptar el estado de inicio de sesión del usuario, interceptar el registro, etc.

addResourceHandlers: recursos estáticos

Hay cuatro directorios estáticos predeterminados en springboot: classpath: / META-INF / resources /, classpath: / resources /, classpath: / static /, classpath: / public

Las rutas expuestas al exterior de estos cuatro directorios estáticos son todas / **, es decir, puede usar directamente la interfaz localhost: 8080 / al acceder a cosas en estos cuatro directorios estáticos.

Ahora podemos personalizar el directorio estático que necesitamos a través de addResourceHandlers, y este proceso no afectará a los cuatro directorios de recursos estáticos existentes.

El código específico es el siguiente:

Inserte la descripción de la imagen aquí

addViewControllers: salto de página

Salto de página significa que no se puede acceder directamente al archivo html de la carpeta de plantillas, por ejemplo, hay un archivo login.html en la carpeta de plantillas.

localhost: 8080 / login.html es inaccesible así. La solución se puede resolver especificando recursos estáticos con addResourceHandlers arriba; por supuesto, también se puede resolver con el controlador, por ejemplo, si desea acceder al archivo login.html en el directorio de plantillas, Puede escribir un método RequestMapping (path = "/ toLogin") en el controlador, deje que este método devuelva "login"; para que pueda acceder al archivo login.html en el directorio de plantillas a través del controlador, es decir, a través de localhost: 8080 / Acceso a la interfaz de inicio de sesión. Pero escribir el código del controlador es demasiado problemático. Podemos escribir un fragmento de código directamente en el método addViewControllers, de la siguiente manera

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        registry.addViewController("/toLogin").setViewName("login");
    }

Esto puede lograr el mismo efecto que escribir un controlador anterior, y también puede acceder al archivo login.html en la plantilla de plantillas a través de la interfaz localhost: 8080 / toLogin

Y este método no afectará al controlador que se ha escrito en el paquete del controlador del controlador.

configureViewResolvers: ver solucionador

Inserte la descripción de la imagen aquí

Un detalle que debe tenerse en cuenta es: si hay una plantilla de motor thymeleaf en springboot, entonces el solucionador de vista predeterminado es prefijo: classpath: / templates /,

sufijo: .html y este tiene la mayor prioridad, siempre que tenga otros analizadores de vista, es inútil incluso si está configurado.

addCorsMappings: Dominio cruzado

Inserte la descripción de la imagen aquí
El archivo configurado en springboot para resolver el problema entre dominios es el siguiente:
Inserte la descripción de la imagen aquí
recuerde que el parámetro del método allowedOrigins no es la URL de springboot en sí, sino la URL de otros.

Supongo que te gusta

Origin blog.csdn.net/qq_45950109/article/details/110878953
Recomendado
Clasificación