20_3 Spring MVC web系列 - WebMvcConfigurer

20_3 Spring MVC web系列 - WebMvcConfigurer

一、背景知识点

WebMvcConfig是Spring MVC提供的一种采用JavaBean形式来代替传统的xml配置文件形式 进行框架个性定制的一个接口,即该接口是用来进行扩展框架的。该接口提供了如下功能:

/* 拦截器配置 */
void addInterceptors(InterceptorRegistry var1);
/* 视图跳转控制器 */
void addViewControllers(ViewControllerRegistry registry);
/* 跨域支持 */
void addCorsMappings(CorsRegistry registry) 

如果我们使用的是Springboot,那么Springboot中为我们提供了一个实现了 WebMvcConfig的类WebMvcAutoConfigurationAdapter。

二、使用场景

2.1 注册一个拦截器

  1. 实现 **HandlerInterceptor **接口,重写 preHandle、postHandle、afterCompletion三个方法
package com.lucky.spring.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created by zhangdd on 2020/8/25
 */
@Slf4j
public class WebInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        log.info("WebInterceptor.preHandle。 method:{},url:{}", request.getMethod(), request.getRequestURI());
        return true;
    }


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        log.info("WebInterceptor.postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, @Nullable Exception ex) throws Exception {
        log.info("WebInterceptor.afterCompletion");
    }
}

  1. 重写 **WebMvcConfigurer **的 addInterceptors 方法
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //配置 WebInterceptor 这个拦截器生效,/** 表示该拦截器对所有的请求都拦截,但是排除了/error请求的拦截
        registry.addInterceptor(new WebInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/error");
    }

2.2 配置CORS实现跨域

重写 **WebMvcConfigurer **的 addCorsMappings 方法,根据自己的业务需求实现CORS配置

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").
                allowedOrigins("https://www.baidu.com", "https://zhangdd.com")//必须字段,允许跨域的域名,可以用*表示允许任何域名使用
        //.allowedMethods("*")//可选字段,允许跨域的方法,使用*表示允许任何方法
        //.allowCredentials(true)//可选字段,布尔值,表示是否允许发送cookie信息
        //.allowedHeaders("*")//允许任何请求头
        //.exposedHeaders("name")//可选字段,指定响应头里的字段信息
        //.maxAge(1000) //可选字段,用来指定本次预检请求的有效期,单位为秒
        ;
    }

2.3 配置ViewController

这一个配置在之前是经常被使用到的,最经常用到的就是"/"、"/index"路径请求时不通过@RequestMapping配置,而是直接通过配置文件映射指定请求路径到指定View页面,当然也是在请求目标页面时不需要做什么数据处理才可以这样使用。

    /**
     * 这一个配置在之前是经常被使用到的,最经常用到的就是"/"、"/index"路径请求时不通过@RequestMapping配置,
     * 而是直接通过配置文件映射指定请求路径到指定View页面,
     * 当然也是在请求目标页面时不需要做什么数据处理才可以这样使用
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("/index");
    }
posted @ 2020-09-10 20:36  在线打工者  阅读(615)  评论(0编辑  收藏  举报