Spring拦截器

拦截器 VS 过滤器

过滤器是Servlet规范中提供的一项技术。不依赖于任何第三方框架。它的作用主要用来做两件事: 加工请求、过滤请求。

拦截器是SpringMVC自己封装的一项基于Handler拦截的结束。也就是说只有在SpringMVC框架里面才有拦截器的概念。拦截器拦截的对象是Handler。它的全称是 HandlerInterceptor。

加上拦截器以后,请求处理流程: request -> DispatcherServlet -> HandlerMapping -> HandlerExecutionChain(包含了目标handler和若干个拦截器) -> HandlerAdapter -> 循环调用HandlerExecutionChain对象中所有拦截器的prehandler方法 -> 如果preHandler返回false,那么handler将不会被调用。反之,才会正常调用。

如何使用拦截器

定义拦截器类

新建一个类实现HandlerInterceptor接口

/**
 * 定义拦截器步骤:
 *      1. 定义一个普通类,实现HandlerInterceptor接口
 *      2. 按需实现接口中的方法
 *      3. 在SpringMVC配置文件中通过<mvc:interceptors></mvc:interceptors>配置拦截器
 */
public class NotAllowedInterceptor implements HandlerInterceptor {

/*此回调方法在执行Handler之前被调用*/
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入NotAllowedInterceptor, 见了我还想过去?");
        return false;
    }

    /*
     此回调方法在执行Handler之后被调用
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    /*
 此回调方法在DispatcherServlet最终响应之前被调用
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
配置拦截器
全局拦截器
<mvc:interceptors>
    <!-- 这种方式配置的拦截器会拦截所有请求 -->
    <bean class="com.sen.springmvc.interceptor.NotAllowedInterceptor" />
</mvc:interceptors>
拦截指定请求的拦截器
<mvc:interceptors>
    <mvc:interceptor>
        <!-- 拦截的请求 -->
        <mvc:mapping path="/admin/**" />
        <!-- 不拦截的请求 -->
        <mvc:exclude-mapping path="/intercepor/**"/>
        <!-- 配置我们定义的实现了HandlerInterceptor接口的类 -->
        <bean class="com.sen.springmvc.interceptor.NotAllowedInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容