• 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

  • 相关阅读:
    最简单,小白易上手 ajax请求数据库信息,echarts页面显示,无需跳转servlet
    北京市民信件大数据简单分析可视化(附加源码) 同含爬虫代码
    echart 横轴 上下分开显示
    echart 横轴倾斜
    echarts 柱状图横轴(x轴)数量太多,可以加一个滚动轴
    错误: 找不到或无法加载主类 org.apache.sqoop.Sqoop
    JAVA爬虫——爬取采集北京市政百姓信件内容——首都之窗(采用htmlunit,webmagic)附源代码、htmlUnit webmagic JAR包
    eclipse 中的DFS Location 找不到了(已解决)
    在Scala 中 val 与 var 的区别(言简意赅 小白易懂 实例代码)
    第21届国际足联世界杯观后感
  • 原文地址:https://www.cnblogs.com/mao2080/p/6769680.html
Copyright © 2020-2023  润新知