SpringMVC配置多個自定義攔截器


特別提示:本人博客部分有參考網絡其他博客,但均是本人親手編寫過並驗證通過。如發現博客有錯誤,請及時提出以免誤導其他人,謝謝!歡迎轉載,但記得標明文章出處: http://www.cnblogs.com/mao2080/

常用場景

1、日志記錄:記錄請求信息的日志,以便進行信息監控、信息統計、計算PV(Page View)等。

2、權限檢查:如登錄檢測,進入處理器檢測檢測是否登錄,如果沒有直接返回到登錄頁面;

3、性能監控:有時候系統在某段時間莫名其妙的慢,可以通過攔截器在進入處理器之前記錄開始時間,在處理完后記錄結束時間,從而得到該請求的處理時間(如果有反向代理,如apache可以自動記錄);

4、通用行為:讀取cookie得到用戶信息並將用戶對象放入請求,從而方便后續流程使用,還有如提取Locale、Theme信息等,只要是多個處理器都需要的即可使用攔截器實現。

1、權限攔截器

 1 package com.mao;
 2 import javax.servlet.http.HttpServletRequest;
 3 import javax.servlet.http.HttpServletResponse;
 4 
 5 import org.springframework.web.servlet.HandlerInterceptor;
 6 import org.springframework.web.servlet.ModelAndView;
 7 
 8 /**
 9  * 
10  * 項目名稱:---
11  * 模塊名稱:接入層
12  * 功能描述:權限攔截器
13  * 創建人: mao2080@sina.com
14  * 創建時間:2017年4月25日 下午8:53:49
15  * 修改人: mao2080@sina.com
16  * 修改時間:2017年4月25日 下午8:53:49
17  */
18 public class AuthsInterceptor implements HandlerInterceptor {
19     
20     /**
21      * 
22      * 描述:執行方法前
23      * @author mao2080@sina.com
24      * @created 2017年4月25日 下午9:01:44
25      * @since 
26      * @param request HttpServletRequest
27      * @param response HttpServletResponse
28      * @param handler handler
29      * @return
30      * @throws Exception
31      */
32     @Override
33     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
34         System.out.println("PowerInterceptor:"+request.getContextPath()+","+request.getRequestURI()+","+request.getMethod());
35         return true;
36     }
37 
38     /**
39      * 
40      * 描述:視圖返回渲染之前被調用
41      * @author mao2080@sina.com
42      * @created 2017年4月25日 下午9:01:47
43      * @since 
44      * @param request HttpServletRequest
45      * @param response HttpServletResponse
46      * @param handler handler
47      * @param modelAndView ModelAndView
48      * @throws Exception
49      */
50     @Override
51     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
52         System.out.println("PowerInterceptor:postHandle");
53     }
54 
55     /**
56      * 
57      * 描述:渲染視圖之后執行
58      * @author mao2080@sina.com
59      * @created 2017年4月25日 下午9:01:51
60      * @since 
61      * @param request HttpServletRequest
62      * @param response HttpServletResponse
63      * @param handler handler
64      * @param ex Exception
65      * @throws Exception
66      */
67     @Override
68     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
69         System.out.println("PowerInterceptor:afterCompletion");
70     }
71 
72 }

2、日志攔截器

 1 package com.mao;
 2 import javax.servlet.http.HttpServletRequest;
 3 import javax.servlet.http.HttpServletResponse;
 4 
 5 import org.springframework.web.servlet.HandlerInterceptor;
 6 import org.springframework.web.servlet.ModelAndView;
 7 
 8 /**
 9  * 
10  * 項目名稱:---
11  * 模塊名稱:接入層
12  * 功能描述:日志攔截器
13  * 創建人: mao2080@sina.com
14  * 創建時間:2017年4月25日 下午8:53:49
15  * 修改人: mao2080@sina.com
16  * 修改時間:2017年4月25日 下午8:53:49
17  */
18 public class LogerInterceptor implements HandlerInterceptor {
19     
20     /**
21      * 
22      * 描述:執行方法前
23      * @author mao2080@sina.com
24      * @created 2017年4月25日 下午9:01:44
25      * @since 
26      * @param request HttpServletRequest
27      * @param response HttpServletResponse
28      * @param handler handler
29      * @return
30      * @throws Exception
31      */
32     @Override
33     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
34         System.out.println("LogerInterceptor:"+request.getContextPath()+","+request.getRequestURI()+","+request.getMethod());
35         return true;
36     }
37 
38     /**
39      * 
40      * 描述:視圖返回渲染之前被調用
41      * @author mao2080@sina.com
42      * @created 2017年4月25日 下午9:01:47
43      * @since 
44      * @param request HttpServletRequest
45      * @param response HttpServletResponse
46      * @param handler handler
47      * @param modelAndView ModelAndView
48      * @throws Exception
49      */
50     @Override
51     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
52         System.out.println("LogerInterceptor:postHandle");
53     }
54 
55     /**
56      * 
57      * 描述:渲染視圖之后執行
58      * @author mao2080@sina.com
59      * @created 2017年4月25日 下午9:01:51
60      * @since 
61      * @param request HttpServletRequest
62      * @param response HttpServletResponse
63      * @param handler handler
64      * @param ex Exception
65      * @throws Exception
66      */
67     @Override
68     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
69         System.out.println("LogerInterceptor:afterCompletion");
70     }
71 
72 }

3、登錄攔截器

 1 package com.mao;
 2 import javax.servlet.http.HttpServletRequest;
 3 import javax.servlet.http.HttpServletResponse;
 4 
 5 import org.springframework.web.servlet.HandlerInterceptor;
 6 import org.springframework.web.servlet.ModelAndView;
 7 
 8 /**
 9  * 
10  * 項目名稱:---
11  * 模塊名稱:接入層
12  * 功能描述:登錄攔截器
13  * 創建人: mao2080@sina.com
14  * 創建時間:2017年4月25日 下午8:53:49
15  * 修改人: mao2080@sina.com
16  * 修改時間:2017年4月25日 下午8:53:49
17  */
18 public class LoginInterceptor implements HandlerInterceptor {
19     
20     /**
21      * 
22      * 描述:執行方法前
23      * @author mao2080@sina.com
24      * @created 2017年4月25日 下午9:01:44
25      * @since 
26      * @param request HttpServletRequest
27      * @param response HttpServletResponse
28      * @param handler handler
29      * @return
30      * @throws Exception
31      */
32     @Override
33     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
34         System.out.println("LoginInterceptor:"+request.getContextPath()+","+request.getRequestURI()+","+request.getMethod());
35         return true;
36     }
37 
38     /**
39      * 
40      * 描述:視圖返回渲染之前被調用
41      * @author mao2080@sina.com
42      * @created 2017年4月25日 下午9:01:47
43      * @since 
44      * @param request HttpServletRequest
45      * @param response HttpServletResponse
46      * @param handler handler
47      * @param modelAndView ModelAndView
48      * @throws Exception
49      */
50     @Override
51     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
52         System.out.println("LoginInterceptor:postHandle");
53     }
54 
55     /**
56      * 
57      * 描述:渲染視圖之后執行
58      * @author mao2080@sina.com
59      * @created 2017年4月25日 下午9:01:51
60      * @since 
61      * @param request HttpServletRequest
62      * @param response HttpServletResponse
63      * @param handler handler
64      * @param ex Exception
65      * @throws Exception
66      */
67     @Override
68     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
69         System.out.println("LoginInterceptor:afterCompletion");
70     }
71 
72 }

4、集中配置

 1 package com.mao;
 2 
 3 import org.springframework.context.annotation.ComponentScan;
 4 import org.springframework.context.annotation.Configuration;
 5 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 6 import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
 7 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 8 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 9 
10 /**
11  * 
12  * 項目名稱:---
13  * 模塊名稱:接入層
14  * 功能描述:系統攔截器配置
15  * 創建人: mao2080@sina.com
16  * 創建時間:2017年4月25日 下午8:53:49
17  * 修改人: mao2080@sina.com
18  * 修改時間:2017年4月25日 下午8:53:49
19  */
20 @Configuration
21 @ComponentScan(basePackages={"com.web.common"})
22 @EnableWebMvc
23 public class WebMVCConfiguration extends WebMvcConfigurerAdapter{
24     
25     /**
26      * 
27      * 描述:添加攔截器
28      * @author mao2080@sina.com
29      * @created 2017年4月25日 下午8:50:54
30      * @since 
31      * @param registry
32      */
33     @Override
34     public void addInterceptors(InterceptorRegistry registry) {
35         /**日志攔截器*/
36         this.excludePathPatterns(registry.addInterceptor(new LogerInterceptor()));
37         /**登錄攔截器*/
38         this.excludePathPatterns(registry.addInterceptor(new LoginInterceptor()));
39         /**權限攔截器*/
40         this.excludePathPatterns(registry.addInterceptor(new AuthsInterceptor()));
41     }
42     
43     /**
44      * 
45      * 描述:過濾URL
46      * @author mao2080@sina.com
47      * @created 2017年4月26日 上午9:57:08
48      * @since 
49      * @param registration
50      */
51     public void excludePathPatterns(InterceptorRegistration registration){
52         registration.addPathPatterns("/*Controller/*");
53         registration.excludePathPatterns("/login");
54         registration.excludePathPatterns("/register");
55         registration.excludePathPatterns("/getToken");
56     }
57     
58 }

5、訪問結果

PowerInterceptor:/laccess,/access/testController/getCognito,GET
LoginInterceptor:postHandle
LogerInterceptor:postHandle

6、參考博客

http://www.cnblogs.com/davidwang456/p/4108355.html

http://www.cnblogs.com/yhtboke/p/5749063.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM