springmvc 多拦截器配置
来源:互联网 发布:windows重置出现问题 编辑:程序博客网 时间:2024/06/07 16:39
//--------------此块内容废话,是这篇文章的产生背景
需求:对所有功能做简单的日志记录, 便于以后统计功能使用情况。
实现方式一:使用aop环绕通知对所有controller、统一异常处理类的访问、响应做横切。 能拿到所有的入参, 重要的是能直接获取到controller的返回值。需要注意的是, 当程序出现异常时环绕通知不会继续执行!!! 所以也需要横切统一异常处理类。
优点:1. 能直接获取controller的返回值
2. 入参,出参等信息可以记录在一条日志中,不会因为其他的请求造成一次请求的日志分离
不足:1. 需要对所有的入口(controller)和出口(controller、统一异常处理, 出口可能有多个)横切
aop日志统计demo: https://github.com/zonaChang/spring-aop-log.git
实现方式二: 使用springmvc拦截器,springmvc的拦截器可以在一次请求达到controller之前和一次请求返回到视图之前执行(已经跳出了controller)。
优点:1. 出口只有一个(请求响应出口),不用理会是从controller或者统一异常响应页面请求的
不足: 1.响应和请求(入参, 出参)的日志不能记录在一条日志中
2. 只能获取到response,但不能直接获取到返回值, 不方便做出参记录。(也可以将出参设置到request中, 然后在postHandle中从request中获取, 需建项目时就要考虑)
最开始想到的是使用方式二“拦截器”,使用的过程中拦截器没有配置成功, 且发现不容易从response中获取返回值内容, 所以放弃了拦截器。 最终使用aop完成日志统计的。
现在将拦截器的配置记录下来
//-------------正文------------------------
多拦截器配置的执行顺序为, 谁先定义,先执行谁的preHandle方法,谁后定义,先执行谁的postHandle方法。且仅当preHandle返回true时,才会指定该拦截器的postHandle方法
命名空间:
xmlns:mvc="http://www.springframework.org/schema/mvc"http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd
applicationContext.xml配置:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!--拦截所有请求--> <bean class="web.interceptor.ApiInterceptor"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/held/xx/**"/> <!-- 仅拦截/held/xx开头的所有请求--> <bean class="handheld.controller.base.interceptor.TestInterceptor"/> </mvc:interceptor> </mvc:interceptors>
Java类: 定义拦截器, 需要使用HandlerInterceptor接口
public class TestInterceptor implements HandlerInterceptor @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //默认返回false, 返回true,且目标方法(controller)正常响应数据(没有抛异常)时才能执行到postHandle return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}
多拦截器正常访问时方法执行顺序pre1-->pre2--target(controller)-->post2-->post1-->after2-->after1
- springmvc 多拦截器配置
- springmvc 拦截器配置
- springMVC拦截器配置
- springMvc拦截器配置
- SpringMvc拦截器配置
- SpringMvc配置拦截器
- springmvc拦截器配置
- SpringMvc拦截器配置
- springmvc拦截器配置
- springmvc拦截器配置
- springMVC拦截器配置
- springmvc配置拦截器
- SpringMVC配置拦截器
- springMVC 拦截器简单配置
- mynote springMVC拦截器配置
- springMVC 拦截器简单配置
- springMVC 拦截器简单配置
- SpringMVC-intercepter(拦截器)配置
- log_archive_dest 和log_archive_dest_1 设置归档的区别
- 深入理解java虚拟机—虚拟机类加载机制
- 官方AWZ爱伪装 一键新机 全息备份 虚拟定位 非NZT 暗王者 IG V8 V3 IOSAPP一键新机 全息备份
- Sharding-JDBC分库分表使用实例
- codeforces884D(大概是构造,优先队列)
- springmvc 多拦截器配置
- hadoop生态圈各产品基本概念梳理
- Spring RestTemplate 用法总结
- 英语之数词规则
- 关于OSG中主相机和从相机的浅显理解
- DOM事件流
- android.content.res.Resources$NotFoundException: String resource ID #0x760a7
- 决战618:探秘京东技术取胜之道
- 10月27日Scalers签名书获奖结果