1. 程式人生 > 實用技巧 >springMVC中攔截器

springMVC中攔截器

攔截器概述:

  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     }