實現自定義攔截器只須要3步: ide
一、建立咱們本身的攔截器類並實現 HandlerInterceptor 接口。 post
二、建立一個Java類繼承WebMvcConfigurerAdapter,並重寫 addInterceptors 方法。 spa
二、實例化咱們自定義的攔截器,而後將對像手動添加到攔截器鏈中(在addInterceptors方法中添加)繼承
public class MyInterceptor1 implements HandlerInterceptor { 接口
@Override資源
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)io
throws Exception {class
System.out.println(">>>MyInterceptor1>>>>>>>在請求處理以前進行調用(Controller方法調用以前)"); 渲染
return true;// 只有返回true纔會繼續向下執行,返回false取消當前請求model
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println(">>>MyInterceptor1>>>>>>>請求處理以後進行調用,可是在視圖被渲染以前(Controller方法調用以後)");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println(">>>MyInterceptor1>>>>>>>在整個請求結束以後被調用,也就是在DispatcherServlet 渲染了對應的視圖以後執行(主要是用於進行資源清理工做)");
}
}
public class MyInterceptor2 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println(">>>MyInterceptor2>>>>>>>在請求處理以前進行調用(Controller方法調用以前)");
return true;// 只有返回true纔會繼續向下執行,返回false取消當前請求
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println(">>>MyInterceptor2>>>>>>>請求處理以後進行調用,可是在視圖被渲染以前(Controller方法調用以後)");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println(">>>MyInterceptor2>>>>>>>在整個請求結束以後被調用,也就是在DispatcherServlet 渲染了對應的視圖以後執行(主要是用於進行資源清理工做)");
}
}
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多個攔截器組成一個攔截器鏈
// addPathPatterns 用於添加攔截規則
// excludePathPatterns 用戶排除攔截
registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**");
registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}