Spring MVC 攔截器 interceptor(實現 HandlerInterceptor 介面)
阿新 • • 發佈:2021-01-13
一、攔截器(interceptor)的作用
SpringMVC的攔截器類似於Servlet 開發中的過濾器 Filter
二、攔截器和過濾器區別
JavaWeb三大元件(Servlet、Filter、Listener)
三、自定義攔截器步驟
1、建立攔截器類,實現 HandlerInterceptor 介面
preHandle : 目標方法執行之前 執行
postHandle : 目標方法執行之後,檢視返回之前 執行
afterCompletion : 流程執行完成後,執行
// 建立攔截器類,實現 HandlerInterceptor 介面 public class MyInterceptor1 implements HandlerInterceptor { // 目標方法執行之前 執行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle.."); String param = request.getParameter("param"); //http://localhost:8080/target?param=yes if("yes".equals(param)){ return true; //返回true表示放行 }else{ //如果不帶引數,param不是yes //轉發到 /error.jsp request.getRequestDispatcher("/error.jsp").forward(request,response); return false; } } // 目標方法執行之後,檢視返回之前 執行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle.."); // 對 ModelAndView 進行再加工 modelAndView.addObject("name","lt22"); } // 流程執行完成後,執行 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion.."); // Exception 進行封裝 } }
2、SpringMvc 配置檔案中配置攔截器
<!--配置攔截器--> <mvc:interceptors> <mvc:interceptor> <!--對那些資源進行攔截操作。 /** 對所有控制器方法--> <mvc:mapping path="/**"/> <bean class="com.lt.interceptor.MyInterceptor1"/> <!--class="自定義攔截器的全限定名"--> </mvc:interceptor> </mvc:interceptors>
3、control
@Controller public class TargetController { @RequestMapping("/target") public ModelAndView show(){ System.out.println("目標資源執行..."); ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("name","lt"); modelAndView.setViewName("index"); return modelAndView; } }