??關注微信公眾號,獲取更多編程內容
更多關于Java方面的文章,歡迎訪問燕歸來https://www.zhoutao123.com
Spring中定義攔截的方式和SpringMVC非常相似顷啼,只是將原本在xml中配置的文件放在Configuration注解中撤师,從來實現(xiàn)注入攔截器的方式贸典,下面我們開始代碼刽漂,代碼非常簡單,基本流程就是定義是攔截器適配器庙楚,然后在適配器中添加自定義的攔截器示例面哥,并配置攔截參數(shù)即可哎壳。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 本文件由周濤創(chuàng)建,位于com.tao.mybatis_plus.config包下
* 創(chuàng)建時間2018/3/24 23:02
* 郵箱:zhoutao@xiaodouwangluo.com
* 作用:暫未填寫
*
* @author tao
*/
//定義攔截器適配器,使用Configuration注解修飾
@Configuration
public class MyHandleInterception extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
//增加攔截器尚卫,并配置攔截的url
registry.addInterceptor(new MyInterception()).addPathPatterns("/book/**");
super.addInterceptors(registry);
}
}
定義攔截器
此處和SPringMVC一模一樣,要求繼承HandlerInterceptor接口归榕。其中的三個方法用處如下:
preHandle
:預處理回調方法,實現(xiàn)處理器的預處理(如登錄檢查)吱涉,第三個參數(shù)為響應的處理器(如我們上一章的Controller實現(xiàn))返回值:true表示繼續(xù)流程(如調用下一個攔截器或處理器)刹泄; false表示流程中斷(如登錄檢查失敗)怎爵,不會繼續(xù)調用其他的攔截器或處理器特石,此時我們需要通過response來產生響應;postHandle
:后處理回調方法鳖链,實現(xiàn)處理器的后處理(但在渲染視圖之前)姆蘸,此時我們可以通過modelAndView(模型和視圖對象)對模型數(shù)據(jù)進行處理或對視圖進行處理,modelAndView也可能為null芙委。afterCompletion
:整個請求處理完畢回調方法逞敷,即在視圖渲染完畢時回調,如性能監(jiān)控中我們可以在此記錄結束時間并輸出消耗時間题山,還可以進行一些資源清理兰粉,類似于try-catch-finally中的finally故痊,但僅調用處理器執(zhí)行鏈中preHandle返回true的攔截器的afterCompletion顶瞳。
public class MyInterception implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("調用了preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("調用了postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("調用了afterCompletion");
}
}
調用接口:http://localhost:8080/book/list/1/1 的時候可以觀察到一下輸出,中間的橘色字體表示執(zhí)行的sql語句愕秫,和攔截沒有關系慨菱,另一方便也說明了postHandle和afterCompletion方法是在方法執(zhí)行完成之后調用的。
更多關于Java方面的文章,歡迎訪問燕歸來https://www.zhoutao123.com