20_3 Spring MVC web系列 - WebMvcConfigurer
阿新 • • 發佈:2020-09-10
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 註冊一個攔截器
- 實現 **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"); } }
- 重寫 **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");
}