有天上飛的概念,就要有落地的實現java
概念十遍不如代碼一遍,朋友,但願你把文中全部的代碼案例都敲一遍git
先贊後看,養成習慣web
SpringBoot 圖文教程系列文章目錄面試
本文內容
數組
攔截器是Spring中的概念,和過濾器相似,能夠對用戶請求進行攔截過濾處理。可是相對於過濾器而言,攔截器要的控制更加的細節,攔截器能夠在三個地方進行執行。app
整個工做過程以下圖
jsp
需求:在項目中建立一個UserController,而後在UserController的先後使用攔截器打印一些信息ide
因此首先咱們開發一個UserControllerpost
攔截器使用的開發步驟學習
- 建立攔截器類
- 註冊攔截器 配置攔截規則
/**
* @Component 和 @Service 是一個做用 建立對象
*/
@Component
public class MyInterceptor1 implements HandlerInterceptor {
Logger logger = LoggerFactory.getLogger(MyInterceptor1.class);
/**
* 在請求到達Controller控制器以前 經過攔截器執行一段代碼
* 若是方法返回true,繼續執行後續操做
* 若是返回false,執行中斷請求處理,請求不會發送到Controller
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("攔截器1 在控制器執行以前執行");
return true;
}
/**
* 控制器以後,跳轉前
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.info("攔截器1 在控制器執行以後執行");
}
/**
* 跳轉以後執行
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.info("攔截器1 最後執行");
}
}
複製代碼
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor1 myInterceptor1;
/**
* 註冊攔截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* addInterceptor 註冊攔截器
* addPathPatterns 配置攔截規則
*/
registry.addInterceptor(myInterceptor1)
.addPathPatterns("/**");
}
}
複製代碼
在postHandle方法中有一個參數是ModelAndView。這個對象在SpringMvc中是一個關鍵對象,能夠進行參數傳遞和路徑跳轉。
ModelAndView
向request做用域存入數據:mav.addObject("做用域數據的name",值);
設置跳轉路徑:mav.setViewName("跳轉方式:/目標資源url-pattern");
做用: model做用+跳轉路徑的做用public ModelAndView xxx(ModelAndView mav){
//1. 向requset做用域存入一個數據
mav.addObject("name",值);
//2. 跳轉到xxx.jsp
mav.setViewName("跳轉方式:/目標資源url-pattern");
return mav;
}
複製代碼
經過ModelAndView 咱們能夠在 postHandle方法中 操做做用域的值 和 設置修改跳轉路徑
在註冊攔截器的時候 配置攔截路徑的addPathPatterns參數爲可變長參數,就意味着能夠接受String的數組,能夠配置多個參數。
addPathPatterns方法的源碼以下
![]()
咱們能夠實現多個攔截器,並依次將他們註冊進去
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor1)
.addPathPatterns("/**");
registry.addInterceptor(myInterceptor2)
.addPathPatterns("/**");
}
複製代碼
關於多個攔截器的執行順序設置
在不作任何設置的時候,多個攔截器的執行順序和註冊的順序有關,先註冊的先執行
也能夠經過Order方法來設置 執行的順序 值越小越先執行
以上就是SpringBoot中攔截器的簡單使用。
恭喜你完成了本章的學習,爲你鼓掌!若是本文對你有幫助,請幫忙點贊,評論,轉發,這對做者很重要,謝謝。
讓咱們再次回顧本文的學習目標
- 掌握SpringBoot中攔截器的使用
要掌握SpringBoot更多的用法,請持續關注本系列教程。
下面體貼的我給朋友萌還準備了一些 自測面試題和項目案例,但願你可以成熱打鐵,將知識夯紮實。
上期自測面試題答案,見面試題集錦 gitee.com/bingqilinpe…
本次需求:
練習文中demo
上期自測實現項目小案例答案,見碼雲倉庫 gitee.com/bingqilinpe…
歡迎關注本人公衆號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。