简介

springMVC拦截器针对处理器映射器进行拦截配置

如果在某个处理器映射器中配置拦截,经由该处理器映射器映射成功的Handler终极利用该拦截器

由于springMVC支持配置多个处理器映射器,因此针对拦截器的配置也有两种,一种针对某一处理器映射器进行配置,一种针对所有处理器映射器进行配置

springmvc拦截了jspspringMVC入门八拦阻器 RESTful API

而实践中每每利用后者,因此接下来的测试代码也往后者为主

拦截器配置

Controller层

@RequestMapping(\公众/queryUser\"大众) public String queryUser(User user) { System.out.println(\"大众Handler\"大众); return \公众/WEB-INF/jsp/user.jsp\"大众; }自定义拦截器需实现HandlerInterceptor接口public class FirstHandlerInterception implements HandlerInterceptor { / 实行期:进入Handler方法之前实行 运用:用于身份认证、身份授权 / @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println(\"大众preHandle\"大众); //false代表拦截,不向下实行 //true代表通过 return false; } / 实行期:进入Handler方法之后,返回ModelAndView之前 运用:用于向ModelAndView中填充公共数据、指定统一的视图 / @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println(\公众postHandle\"大众); } / 实行期:进入Handler完成 运用:用于统一非常处理、统一日志处理 / @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println(\"大众postHandle\公众); }}

springMVC配置文件中配置拦截器

<!-- 配置拦截器 --> <mvc:interceptors> <!-- 多个拦截器顺序实行 --> <mvc:interceptor> <!-- 拦截所有URL --> <mvc:mapping path=\公众/\公众/> <bean class=\公众com.springmvc.intercepter.FirstHandlerInterception\"大众></bean> </mvc:interceptor> </mvc:interceptors>

访问URL:http://localhost:8080/springMVC/queryUser.action

实行结果,Console输出:

多拦截器测试

配置拦截器2,办法与上文所诉同等,不再赘述

访问URL:http://localhost:8080/springMVC/queryUser.action

场景1:拦截器1通过,拦截器2通过

场景2:拦截器1不通过,拦截器2不通过

场景3:拦截器1不通过,拦截器2通过

场景4:拦截器1通过,拦截器2不通过

总结:

1、所有拦截器均通过,则首先顺序实行preHandler,再实行Handler,再逆序实行postHandler,再逆序实行afterCompletion

2、只要有一个拦截器不通过,则所有postHandler不实行

3、假设有n个拦截器,若第k的拦截器不通过,则先顺序实行preHandler到第k个拦截器(包括k的preHandler),然后逆序实行afterCompletion到第(k-1)个拦截器(不包括k的afterCompletion)

上一篇:springMVC入门(七)------RESTFul风格的支持