特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处: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. python多线程、多进程、协程笔记

    import threading import time import multiprocessing import asyncio movie_list = ['斗破.avi', '复仇者联盟.mp ...

  2. exits 和no exits

    exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:  select name from student where sex = 'm' and mark exists(select ...

  3. shell 里面的计算

    ---恢复内容开始--- 关于shell里面的计算其实早在接触LINUX的时候就已经接触到了.每次在运用的时候却是在网上到处找,所以觉得花点时间好好研究下. 首先了解下常用的算数运算符号: +  - ...

  4. Delphi Edit组件

  5. uestc summer training #4 牛客第一场

    A dp[i][j][k]可以n3地做 但是正解是找把问题转化为一个两点不相交路径 最终答案为C(n+m, n)2-C(n+m, m-1)C(n+m,n-1) B 把题目的矩阵看成无向图的邻接矩阵 这 ...

  6. kafka常见命令

    基础命令 查看已有topic 进入kafka解压目录:/home/zallds/kafka_2.10-0.10.2.1 执行如下命令,就会列出所有topic [zallds@PUBLIC-26 bin ...

  7. Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作: //查看有哪些数据库 > show dbs local  0.078GB mydb   0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...

  8. 【BZOJ1176】Mokia

    题目大意:给定一个 N*N 的矩形,有 Q 次操作,每个操作可以是矩形单点修改或查询子矩形的权值和. 题解:CDQ分治适合处理修改操作之间互不影响且支持离线的题目. 满足以上操作条件的显然可以树套树来 ...

  9. 初识容器和Docker

    什么是Docker? Docker 是一个用于开发,交付和运行应用程序的开放平台.能够就应用程序和基础架构分开,从而可以快速的交付软件. 借助Docker可以和管理应用程序的方式来管理基础架构. 使用 ...

  10. 【WinForm-无边框窗体】实现Panel移动窗体,没有边框的窗体

    没有边框的窗体怎么移动?其实方法有很多,下面介绍一种用控件来移动窗体,Panel或PictureBox都可.主要设置控件的MouseDowm和MouseLeave事件. 第一步:窗体设计 窗体最上面是 ...