10、拦截器Interceptor的使用

1          什么是拦截器

拦截器可以在请求执行流程中的某个位置拦截请求并执行代码,也可以终止请求流程的执行

 

2          拦截器可以做什么

拦截器通常用作权限验证,或者日志记录等

 

3          Interceptor(拦截器)与servletapi中的filter功能类似

3.1         下图是spring mvc的处理流程,请求经过dispatcher servlet的调度后,会顺序执行一系列的interceptor(拦截器)并执行其中的方法,拦截器有三个方法

10、拦截器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          执行我们的要验证的页面和不验证的页面,查看控制台的输出