springMVC中攔截器
阿新 • • 發佈:2020-08-13
攔截器概述:
SpringMVC的處理器攔截器類似於Servlet開發中的過濾器Filter,用於對處理器進行預處理和後處理。開發者可以自己定義一些攔截器來實現特定的功能。例如:必須登入後才可以訪問指定頁面
攔截器與過濾器的區別:
攔截器主要採用aop橫切進入方法的思想進行應用
過濾器:
servlet規範中的一部分,任何java web工程都可以使用
在url-pattern中配置了/*之後,可以對所有要訪問的資源進行攔截
攔截器:
?攔截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
攔截器只會攔截訪問的控制器方法, 如果訪問的是jsp/html/css/image/js是不會進行攔截的
· 1. 匯入攔截器依賴
1 <dependency> 2 <groupId>org.springframework</groupId> 3 <artifactId>spring-webmvc</artifactId> 4 <version>5.2.7.RELEASE</version> 5 </dependency> 6 <dependency> 7<groupId>javax.servlet</groupId> 8 <artifactId>servlet-api</artifactId> 9 <version>2.5</version> 10 </dependency>
2.在springmvc.xml中配置相關
1 <!--攔截器--> 2 <mvc:interceptors> 3 <mvc:interceptor> 4<!--/** 包括路徑及其子路徑--> 5 <!--/admin/* 攔截的是/admin/add等等這種 , /admin/add/user不會被攔截--> 6 <!--/admin/** 攔截的是/admin/下的所有--> 7 <mvc:mapping path="/**"/> 8 <!--bean配置的就是攔截器專案路徑--> 9 <bean class="com.bdqn.util.MyInterceptor"/> 10 </mvc:interceptor> 11 </mvc:interceptors>
3.編寫一個類實現攔截器 HandlerInterceptor
1 //在請求處理的方法之前執行 2 // 如果返回true執行下一個攔截器 3 // 如果返回false就不執行下一個攔截器 4 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 5 System.out.println("----------處理請求前,進行攔截判斷---------"); 6 return true; 7 } 8 //在請求處理方法執行之後執行 9 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 10 System.out.println("------------處理後------------"); 11 } 12 //在dispatcherServlet處理後執行,做清理工作 13 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 14 System.out.println("------------清理------------"); 15 } 16 }
注意:此處
request.getRequestURI().contains("Login")
表示在一個請求路徑中匹配是否包含該字串,如果包含返回true
1 @RequestMapping("/Login") 2 public String Login(HttpSession session,@RequestParam("user") String user,@RequestParam("pwd") String pwd,Model model){ 3 //故如果攔截放行判斷沒有包含該路徑字串,如果該方法被攔截就算提交也不會儲存成功資料 4 System.out.println(user); 5 //將登入資訊存放到session中 6 session.setAttribute("isLogin",user); 7 8 return "test"; 9 }