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

    脚注是在页面下端添加的注释,如添加在一篇论文首页下端的作者情况简介:尾注是在文档尾部(或节的尾部)添加的注释,如添加在一篇论文末尾的参考文献目录. 若用手工添加脚注和尾注,则既麻烦又易出错.当用Wor ...

  2. js获取7天之前的日期或者7天之后的日期

    js获取7天之前的日期或者7天之后的日期(网上摘取的,记录自己使用) function fun_date(num) { var date1 = new Date(); //今天时间 var time1 ...

  3. Slimvoice快速而小巧

    这可行吗?绝对没问题.完全加载的最大页面只有230 KB.因为所有内容都被缓存和压缩,所以随后查看的每个页面只有大约6 KB,这比我见过的具有相同功能的SPA要小得多. Slimvoice快速而小巧, ...

  4. 关于python导包问题

    讨论采用 * 模糊导入或者 单独导入变量 会在不同文件生成不同的对象 .a └── mypackage ├── a.py ├── b.py ├── c.py   b.py内容如下 import c d ...

  5. host文件介绍

    默认位置为%SystemRoot%\system32\drivers\etc\,但也可以改变. 动态目录由注册表键\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe ...

  6. kotlin函数式编程入门及图片处理

    函数式编程入门: 对于面向对象编程[OOP]和函数式编程[FP] 由于在JAVA8的学习中系统的学习过了,所以这里对其概念就不过多解释了,下面直接用代码来看下在kotlin中函数式编程是如何编写的: ...

  7. php socket如何实现长连接

    长连接是什么? 朋友们应该都见过很多在线聊天工具和网页在线聊天的工具.学校内有一种熟悉的功能,如果有人回复你了,网站会马上出现提示,此时你并没有刷新页面:Gmail也有此功能,如果邮箱里收到了新的邮件 ...

  8. 解决找不到roslyn\csc.exe文件问题

    csc.exe代表C# 编译器,所以在需要项目nuget包引用”Microsoft.CodeDom.Providers.DotNetCompilerPlatform“以及”Microsoft.Net. ...

  9. redis的数据类型和基本操作

    Redis 的Key Redis 的 key 是字符串类型,但是 key 中不能包括边界字符,由于 key 不是 binary safe的字符串,所以像"my key"和" ...

  10. MySQL第二次安装随笔

    找到之前的MySQL的安装包,重新安装MySQL. 1.设置环境变量,win10的可以右键此电脑-属性,在系统变量Path中添加mysql文件bin的路径 2.修改配置文件mydefault.ini( ...