springmvc中的拦截器interceptor用法
1.配置拦截器
在springMVC.xml配置文件增加:

1 <mvc:interceptors>
2 <!-- 日志拦截器 -->
3 <mvc:interceptor>
4 <mvc:mapping path="/**" />
5 <mvc:exclude-mapping path="/static/**" />
6 <bean class="拦截器java代码路径" />
7 </mvc:interceptor>
8 </mvc:interceptors>

说明:
1)mvc:mapping 拦截器路径配置
2)mvc:exclude-mapping 拦截器不需要拦截的路径
在mvc:interceptors标签下声明interceptor主要有两种方式:
- 直接定义一个Interceptor实现类的bean对象。使用这种方式声明的Interceptor拦截器将会对所有的请求进行拦截。
- 使用mvc:interceptor标签进行声明。使用这种方式进行声明的Interceptor可以通过mvc:mapping子标签来定义需要进行拦截的请求路径。
2、样例:

1 public class LogsInterceptor extends HandlerInterceptorAdapter {
2
3 private static final Logger logger = LoggerFactory.getLogger(LogsInterceptor.class);
4
5 private NamedThreadLocal<String> logContext = new NamedThreadLocal<String>("log-id");
6
7 @Autowired
8 private TLogDao logDao;
9
10 /**
11 * preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,
12 * SpringMVC中的Interceptor拦截器是链式的,可以同时存在多个Interceptor,
13 * 然后SpringMVC会根据声明的前后顺序一个接一个的执行,
14 * 而且所有的Interceptor中的preHandle方法都会在Controller方法调用之前调用。
15 * SpringMVC的这种Interceptor链式结构也是可以进行中断的,
16 * 这种中断方式是令preHandle的返回值为false,当preHandle的返回值为false的时候整个请求就结束了。
17 */
18 @Override
19 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
20 String host = request.getRemoteHost();
21 String url = request.getRequestURI();
22 TLogEntity entity = new TLogEntity();
23 entity.setCreateTime(new Timestamp(System.currentTimeMillis()));
24 entity.setCreateUser("admin");
25 entity.setIpAddress(host);
26 entity.setLogUrl(url);
27 entity.setIsSuccess("N");
28 logDao.save(entity);
29 logContext.set(entity.getLogId());
30
31 logger.debug("IP为---->>> " + host + " <<<-----访问了系统");
32 return true;
33 }
34
35 /**
36 * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。
37 * postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之 后, 也就是在Controller的方法调用之后执行,
38 * 但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操作。
39 * 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用,
40 * 这跟Struts2里面的拦截器的执行过程有点像,
41 * 只是Struts2里面的intercept方法中要手动的调用ActionInvocation的invoke方法,
42 * Struts2中调用ActionInvocation的invoke方法就是调用下一个Interceptor或者是调用action,
43 * 然后要在Interceptor之前调用的内容都写在调用invoke之前,要在Interceptor之后调用的内容都写在调用invoke方法之后。
44 */
45 @Override
46 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
47 }
48
49 /**
50 * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。
51 * 该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行, 这个方法的主要作用是用于清理资源的,
52 */
53 @Override
54 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
55 String host = request.getRemoteHost();
56 String logId = logContext.get();
57 TLogEntity entity = logDao.findOne(logId);
58 entity.setIsSuccess("Y");
59 logDao.save(entity);
60
61 logger.debug("IP为---->>> " + host + " <<<-----访问成功");
62 }
63
64 }

在这个拦截器中,在方法执行前可以做session或权限的。
总结:
interceptor 的执行顺序大致为:
- 请求到达 DispatcherServlet
- DispatcherServlet 发送至 Interceptor ,执行 preHandle
- 请求达到 Controller
- 请求结束后,postHandle 执行
拦截器1放行,拦截器2 preHandle才会执行。
拦截器2 preHandle不放行,拦截器2 postHandle和afterCompletion不会执行。
只要有一个拦截器不放行,postHandle不会执行。
拦截器1 preHandle不放行,postHandle和afterCompletion不会执行。
拦截器1 preHandle不放行,拦截器2不执行。
Spring 中主要通过 HandlerInterceptor 接口来实现请求的拦截,实现 HandlerInterceptor 接口需要实现下面三个方法:
- preHandle() – 在handler执行之前,返回 boolean 值,true 表示继续执行,false 为停止执行并返回。
- postHandle() – 在handler执行之后, 可以在返回之前对返回的结果进行修改
- afterCompletion() – 在请求完全结束后调用,可以用来统计请求耗时等等
参考链接
https://www.cnblogs.com/lcngu/p/7096597.html
https://www.cnblogs.com/junzi2099/p/8022058.html
https://www.cnblogs.com/moxiaotao/p/9663351.html
springmvc中的拦截器interceptor用法的更多相关文章
- springMvc中实现拦截器Interceptor以及添加静态资源映射
这个代码写了很久了,多久呢?2018年12-20号写的.... 废话不多说,简化一下,作为笔记. 注: public class springmvcConfig extends WebMvcConfi ...
- 9.springMVC中的拦截器
springMVC中的拦截器大概大致可以分为以下几个步骤去学习: 1.自定义一个类实现HandlerInterceptor接口,这里要了解其中几个方法的作用 2.在springMVC的配置文件中添加拦 ...
- SpringMVC中的拦截器、过滤器的区别、处理异常
1. SpringMVC中的拦截器(Interceptor) 1.1. 作用 拦截器是运行在DispatcherServlet之后,在每个Controller之前的,且运行结果可以选择放行或拦截! 除 ...
- 【SpringMVC学习11】SpringMVC中的拦截器
Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用 ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- Spring MVC中的拦截器Interceptor
谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...
- SpringMVC中的拦截器
1. 自定义拦截器 实现HandlerInterceptor接口 拦截器一: package cn.rodge.ssm.interceptor;import javax.servlet.http.Ht ...
- (转)Angular中的拦截器Interceptor
什么是拦截器? 异步操作 例子 Session 注入(请求拦截器) 时间戳(请求和响应拦截器) 请求恢复 (请求异常拦截) Session 恢复 (响应异常拦截器) 转之:http://my.osch ...
- springmvc中配置拦截器
-------------------------------------------- 登陆controller方法 @Controller public class LoginController ...
随机推荐
- 调用DATASNAP+FIREDAC的远程方法有时会执行二次SQL或存储过程的BUG(转永喃兄)
调用DATASNAP+FIREDAC的远程方法有时会执行二次SQL或存储过程的BUG 1)查询会重复执行的情形:Result := DATASETPROVIDER.Data会触发它关联的DATASET ...
- 使用sigaction函数
sigaction函数 修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数) :失败:-1,设置errno 参数: act:传入参数,新的处理方式.oldact:传出参数,旧的处理方式. ...
- U3D 编辑器中sceneview下相机操作相关
前几天在项目中想要实现一个编辑器模式下的3D空间画线功能,几经周折,还是作废. 原因有:相机空间到世界空间转换问题对于Z值不清楚,U3D自定义坐标轴控制问题,射线与平面求交点不对, 一个关键问题是:编 ...
- Linux后门入侵检测工具
一.rootkit简介 rootkit是Linux平台下最常见的一种木马后门工具,它主要通过替换系统文件来达到入侵和和隐蔽的目的,这种木马比普通木马后门更加危险和隐蔽,普通的检测工具和检查手段很难发现 ...
- 二维码API接口
1.http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.54admin.net 2.http://b.bshare ...
- python机器学习一:KNN算法实现
所谓的KNN算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个 ...
- mybatis实现一对多连接查询
问题:两个对象User和Score,它们之间的关系为一对多. 底层数据库为postgresql,ORM框架为mybatis. 关键代码如下: mybatis配置文件如下: mybatis.xml文件内 ...
- Oracle 导入大量数据
环境是这样的: 需要导入大量数据到Oracle,目前Oracle已建立索引和触发器了,导入的数据是树型结构,需要关联. 采用的方法是: 删除以前数据库的索引和触发器,用OracleBulkCopy批量 ...
- 吴裕雄 python神经网络(8)
# -*- coding=utf-8 -*-import numpy as npimport kerasfrom keras.models import Sequentialfrom keras.la ...
- spark 学习_rdd常用操作
[spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...