特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

常用场景

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。

2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;

3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);

4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。

1、权限拦截器

 package com.mao;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; /**
*
* 项目名称:---
* 模块名称:接入层
* 功能描述:权限拦截器
* 创建人: mao2080@sina.com
* 创建时间:2017年4月25日 下午8:53:49
* 修改人: mao2080@sina.com
* 修改时间:2017年4月25日 下午8:53:49
*/
public class AuthsInterceptor implements HandlerInterceptor { /**
*
* 描述:执行方法前
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:44
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("PowerInterceptor:"+request.getContextPath()+","+request.getRequestURI()+","+request.getMethod());
return true;
} /**
*
* 描述:视图返回渲染之前被调用
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:47
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @param modelAndView ModelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("PowerInterceptor:postHandle");
} /**
*
* 描述:渲染视图之后执行
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:51
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @param ex Exception
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("PowerInterceptor:afterCompletion");
} }

2、日志拦截器

 package com.mao;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; /**
*
* 项目名称:---
* 模块名称:接入层
* 功能描述:日志拦截器
* 创建人: mao2080@sina.com
* 创建时间:2017年4月25日 下午8:53:49
* 修改人: mao2080@sina.com
* 修改时间:2017年4月25日 下午8:53:49
*/
public class LogerInterceptor implements HandlerInterceptor { /**
*
* 描述:执行方法前
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:44
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("LogerInterceptor:"+request.getContextPath()+","+request.getRequestURI()+","+request.getMethod());
return true;
} /**
*
* 描述:视图返回渲染之前被调用
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:47
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @param modelAndView ModelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("LogerInterceptor:postHandle");
} /**
*
* 描述:渲染视图之后执行
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:51
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @param ex Exception
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("LogerInterceptor:afterCompletion");
} }

3、登录拦截器

 package com.mao;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; /**
*
* 项目名称:---
* 模块名称:接入层
* 功能描述:登录拦截器
* 创建人: mao2080@sina.com
* 创建时间:2017年4月25日 下午8:53:49
* 修改人: mao2080@sina.com
* 修改时间:2017年4月25日 下午8:53:49
*/
public class LoginInterceptor implements HandlerInterceptor { /**
*
* 描述:执行方法前
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:44
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("LoginInterceptor:"+request.getContextPath()+","+request.getRequestURI()+","+request.getMethod());
return true;
} /**
*
* 描述:视图返回渲染之前被调用
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:47
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @param modelAndView ModelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("LoginInterceptor:postHandle");
} /**
*
* 描述:渲染视图之后执行
* @author mao2080@sina.com
* @created 2017年4月25日 下午9:01:51
* @since
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler handler
* @param ex Exception
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("LoginInterceptor:afterCompletion");
} }

4、集中配置

 package com.mao;

 import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /**
*
* 项目名称:---
* 模块名称:接入层
* 功能描述:系统拦截器配置
* 创建人: mao2080@sina.com
* 创建时间:2017年4月25日 下午8:53:49
* 修改人: mao2080@sina.com
* 修改时间:2017年4月25日 下午8:53:49
*/
@Configuration
@ComponentScan(basePackages={"com.web.common"})
@EnableWebMvc
public class WebMVCConfiguration extends WebMvcConfigurerAdapter{ /**
*
* 描述:添加拦截器
* @author mao2080@sina.com
* @created 2017年4月25日 下午8:50:54
* @since
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**日志拦截器*/
this.excludePathPatterns(registry.addInterceptor(new LogerInterceptor()));
/**登录拦截器*/
this.excludePathPatterns(registry.addInterceptor(new LoginInterceptor()));
/**权限拦截器*/
this.excludePathPatterns(registry.addInterceptor(new AuthsInterceptor()));
} /**
*
* 描述:过滤URL
* @author mao2080@sina.com
* @created 2017年4月26日 上午9:57:08
* @since
* @param registration
*/
public void excludePathPatterns(InterceptorRegistration registration){
registration.addPathPatterns("/*Controller/*");
registration.excludePathPatterns("/login");
registration.excludePathPatterns("/register");
registration.excludePathPatterns("/getToken");
} }

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

SpringMVC配置多个自定义拦截器的更多相关文章

  1. struts2 的自定义 拦截器

    Struts2的 拦截器: 对于拦截器,Struts2官方给出的 定义是: 拦截器是动态拦截Action调用的对象.它提供了一种机制,使开发者可以定义一段代码,在Action执行之前或者之后被调用执行 ...

  2. SpringMVC——自定义拦截器、异常处理以及父子容器配置

    自定义拦截器: 一.若想实现自定义拦截器,需要实现 org.springframework.web.servlet.HandlerInterceptor 接口. 二.HandlerIntercepto ...

  3. SpringMvc自定义拦截器

    SpringMvc也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义拦截器必须实现HandlerInterceptor接口 -preHandle():这个方法在业务处理器 ...

  4. JavaEE开发之SpringMVC中的自定义拦截器及异常处理

    上篇博客我们聊了<JavaEE开发之SpringMVC中的路由配置及参数传递详解>,本篇博客我们就聊一下自定义拦截器的实现.以及使用ModelAndView对象将Controller的值加 ...

  5. SpringMVC(四)-- 文件下载、自定义拦截器、异常处理

    1.文件下载 用ResponseEntity<byte[]> 返回值完成文件下载 具体参见本博客之前的<文件上传下载> @RequestMapping(value=" ...

  6. springmvc 自定义拦截器实现未登录用户的拦截

    第一步:编写自定义拦截器类,该类继承HandlerInterceptorAdapter,重写preHandle方法  第二步:配置springmvc.xml文件,定义拦截器属性  登录请求的mappi ...

  7. SpringMVC系列(十二)自定义拦截器

    Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口– preHandle():这个方法在业务处 ...

  8. struts2拦截器-自定义拦截器,放行某些方法(web.xml配置)

    一.web.xml配置 <filter> <filter-name>encodingFilter</filter-name> <filter-class> ...

  9. SpringBoot2.X自定义拦截器实战及新旧配置对比(核心知识)

    简介: 讲解拦截器使用,Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解 1.@Configuration 继承WebMvcConfigurationAdap ...

随机推荐

  1. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  2. JS常见面试题总结-真实被问到的!

    1.判断数据类型有几种方法 console.log(typeof 'abc') // string console.log(Object.prototype.toString.call('abc')) ...

  3. 小P的架构生活(上)

    背景:这年小P已经参加工作4年了,在前同事Z的极力劝说下,小P加入了Z新开的公司Y,公司一共有三个人:老板Z.程序员小P.前台W.项目名为XX交易系统 小P加班加点,终于在两个月后把系统开发完成,版本 ...

  4. appium基础之简单的小例子

    appium环境搭建了,当然也要开始用起来了,记录一下学习的过程 遇到问题 1.The permission to start '.ui.home.view.HomeActivity' activit ...

  5. 15 Zabbix4.4.1系统告警“sda: Disk read/write request response are too high”

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 Zabbix4.4.1系统告警“sda: Disk read/write request resp ...

  6. Spring Boot热部署插件

    在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率,热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,而不需要重启应用,这样大大提高了我们开发的效率. Spr ...

  7. WIndows cmd command 指令总结

    1. 文件操作 显示当前文件夹内所有文件 dir dir /s 仅显示特定后缀的文件 # 查找当前目录下所有mp3文件dir /s *.mp3

  8. win10上使用自带的Hyper-V安装虚拟机

    Hyper-V管理器,新建虚拟机,安装了.iso系统,但启动报错,电脑上联想G40-70,都说在bios设置的security里开启硬件虚拟化选项,可我security里没有虚拟化相关选项, 后来在 ...

  9. libusb读写

    https://blog.csdn.net/u012247418/article/details/83684980 https://github.com/crazybaoli/libusb-test ...

  10. monkey自定义脚本

    自定义脚本稳定性测试 常规的monkey是执行随机的事件流,如果想让monkey测试某个特定的场景,这个时候需要自定义脚本. 用户需要先笔记好脚本再存放在手机上,通过启动monkey -f参数调用脚本 ...