介紹
攔截器一般用在某個方法被通路之前進行攔截,然後在方法執行之前或之後加入某些操作。
使用
1、建立一個SpringBoot工程,定義一個自定義攔截器類,實作HandlerInterceptor接口,重寫三個方法。
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle.....");
//簡單實作對是否登入的判斷
User user = (User) request.getSession().getAttribute("loginUser");
if(user != null){
return true;
}
return false;
}
@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("afterCompetion......");
}
}
方法分析
preHandle()在請求方法之前執行,傳回值為boolean類型,true表示請求繼續執行,false表示請求結束。
postHandle()在請求處理完成,dispatcherServlet傳回視圖後執行。
afterCompletion()在dispatcherServlet渲染視圖後執行。
2、編寫攔截器配置類
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//攔截所有請求
String[] addPathPatterns = {"/**"};
//不需要攔截的請求
String[] excludePathPatterns = {"/page/logout","/page/login","/page/init","/reader/login"};
registry.addInterceptor(new MyInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
super.addInterceptors(registry);
}
}