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配置文件中通过配置拦截器
 */
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 {

    }
}
配置拦截器
全局拦截器

    
    

拦截指定请求的拦截器

    
        
        
        
        
        
        
    

你可能感兴趣的:(Spring拦截器)