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");
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM