1 什么是拦截器
拦截器可以在请求执行流程中的某个位置拦截请求并执行代码,也可以终止请求流程的执行
2 拦截器可以做什么
拦截器通常用作权限验证,或者日志记录等
3 Interceptor(拦截器)与servletapi中的filter功能类似
3.1 下图是spring mvc的处理流程,请求经过dispatcher servlet的调度后,会顺序执行一系列的interceptor(拦截器)并执行其中的方法,拦截器有三个方法
3.2 bool preHandle,在步骤5处执行
3.2.1 返回true则继续下一个拦截器
3.2.2 返回false则中止请求,不再进入后面的拦截器与Controller中的方法
3.3 Void postHandle,在步骤10处执行
3.4 Void afterHandle,在步骤12处执行
4 使用拦截器
要使用拦截器可以通过继承HandlerInterceptorAdapter类并重写其中发方法来实现,建立拦截器如下
public class MobileInterceptor extends HandlerInterceptorAdapter{ @Autowired private IStoreService storeService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //验证用户权限 boolean isLogin = true; if(isLogin){ //用户权限验证成功 return true; }else { //用户权限验证失败则跳转,并终止请求流程 response.sendRedirect("/mob/login"); return false; } } }
5 将拦截器配置到spring-mvc.xml中
<!-- 拦截器配置 --> <mvc:interceptors> <!-- 直接配置则拦截所有mvc请求 <bean class="bnsy.sis.interceptor.MobileInterceptor> --> <!-- 单独配置则拦截配置的请求地址 --> <mvc:interceptor> <mvc:mapping path="/mob/**" /> <mvc:exclude-mapping path="/mob/login" /> <mvc:exclude-mapping path="/mob/autoLogin" /> <bean class="bnsy.sis.interceptor.MobileInterceptor" /> </mvc:interceptor> </mvc:interceptors>
6 执行我们的要验证的页面和不验证的页面,查看控制台的输出