javascript
springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!
前面介紹了Spring Boot 如何整合定時(shí)任務(wù)已經(jīng)Spring Boot 如何創(chuàng)建異步任務(wù),不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。
接下來開始講 Spring Boot的重要功能:整合攔截器。以前我們?cè)谧鰉vc 項(xiàng)目時(shí)也使用到的是filter過濾器也就是攔截器。其實(shí)Spring Boot 中的攔截器和SpringMVC中的攔截器也是類似的,只是配置上有些區(qū)別。那么下面我們就來看看Spring Boot 是怎么配置攔截器的。
一、攔截器配置
創(chuàng)建InterceptorConfig 攔截器配置類,這個(gè)類主要是統(tǒng)一配置管理所有的攔截器。
package com.weiz.config;import com.weiz.controller.interceptor.TwoInterceptor;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import com.weiz.controller.interceptor.OneInterceptor;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.annotation.Resource;@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Resource private OneInterceptor myInterceptor1; @Override public void addInterceptors(InterceptorRegistry registry) { //添加要攔截的url 1 攔截的路徑 放行的路徑 registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login"); }}說明:
1、使用注解@Configuration配置攔截器
2、繼承WebMvcConfigurer 接口
3、重寫addInterceptors方法,添加需要的攔截器地址
二、自定義攔截器
前面創(chuàng)建了攔截器的配置管理類,接下來就應(yīng)該創(chuàng)建具體的攔截器。首先創(chuàng)建com.weiz.controller.interceptor包,并創(chuàng)建OneInterceptor攔截器。這個(gè)攔截器通過實(shí)現(xiàn) HandlerInterceptor 接口,達(dá)到請(qǐng)求攔截的作用。具體代碼如下:
package com.weiz.controller.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class OneInterceptor implements HandlerInterceptor { /** * 在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { System.out.println("被OneInterceptor攔截,放行...");return true; } /** * 請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后) */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception { // TODO Auto-generated method stub } /** * 在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行 * (主要是用于進(jìn)行資源清理工作) */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception { // TODO Auto-generated method stub }}說明:
1、HandlerInterceptor接口有 3 個(gè)攔截方法:
preHandle:Controller邏輯執(zhí)行之前進(jìn)行攔截
postHandle:Controller邏輯執(zhí)行完畢但是視圖解析器還未進(jìn)行解析之前進(jìn)行攔截
afterCompletion:Controller邏輯和視圖解析器執(zhí)行完畢進(jìn)行攔截
2、實(shí)際開發(fā)中 一般preHandle 使用頻率比較高,postHandle 和 afterCompletion操作相對(duì)比較少。
postHandle 是在視圖解析前進(jìn)行攔截,通過 Model 再次添加數(shù)據(jù)到 Request域中。
afterCompletion 暫時(shí)沒有想到使用場(chǎng)景,如果有使用過的場(chǎng)景可以在下面評(píng)論區(qū)中進(jìn)行評(píng)論。
測(cè)試
在瀏覽器中,輸入配置管理器中攔截的地址:http://localhost:8088/th/index
從上圖可以看出定義的攔截器生效了,打印出了攔截器里面的log 。
最后
以上,就把Spring Boot 如何使用攔截器介紹完了,是不是特別簡(jiǎn)單。SpringBoot 2 整合攔截器和整合 Filter的操作很像,都是通過一個(gè)注冊(cè)類將其注入到Spring的上下文中,只不過Filter使用的是 FilterRegistrationBean 而攔截器使用的是 InterceptorRegistry。
個(gè)人覺得比使用 xml 配置的方式更為簡(jiǎn)單,如果你還沒有在 SpringBoot 項(xiàng)目中使用過攔截器,趕快來操作一下吧!
這個(gè)系列課程的完整源碼,也會(huì)提供給大家。大家關(guān)注我的頭條號(hào)(章為忠學(xué)架構(gòu)),獲取這個(gè)系列課程的完整源碼。
推薦閱讀:
Spring Boot整合定時(shí)任務(wù)Task,一秒搞定定時(shí)任務(wù)
SpringBoot入門系列(四)如何整合Thymeleaf模板引擎
Spring Boot集成Redis代碼詳解,三步搞定!
SpringBoot入門系列(三)資源文件屬性配置
Spring Boot入門系列(六)Spring整合Mybatis詳解「附詳細(xì)步驟」
總結(jié)
以上是生活随笔為你收集整理的springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的基本语术_Python中的
- 下一篇: typescript语法高亮插件_Jav