SpringMVC-拦截器


  • 1、定义
  • 2、定义拦截器
    • 2.1、定义一个类
    • 2.2、拦截器配置
      • 2.2.1、 针对某种mapping配置
      • 2.2.2、配置全局拦截器
    • 2.3、拦截器总结
    • 2.4、防止拦截静态资源
      • 2.4.1、方案一
      • 2.4.2、方案二
      • 2.4.3、方案三
      • 2.4.4、方案四

1、定义

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。


2、定义拦截器

2.1、定义一个类

实现HandlerInterceptor接口,如下:

public class Interceptor1 implements HandlerInterceptor {

    /**
     * controller执行前调用此方法
     * 返回true表示继续执行,返回false中止执行
     * 这里可以加入登录校验、权限拦截等
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("Interceptor1 preHandle......");
        // 在handle执行之前执行此方法。
        //返回值:如果返回true,放行
        //返回值:如果返回false,拦截
        return true;
    }

    /**
     * controller执行后但未返回视图前调用此方法
     * 这里可在返回用户前对模型数据进行加工处理,比如这里加入公用信息以便页面显示
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        //handle执行之后,返回ModelAndView之前。
        System.out.println("Interceptor1 postHandle......");
    }

    /**
     * controller执行后且视图返回后调用此方法
     * 这里可得到执行controller时的异常信息
     * 这里可记录操作日志,资源清理等
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // 返回ModelAndView之后。
        //可以在此处理异常
        System.out.println("Interceptor1 afterCompletion......");
    }

2.2、拦截器配置

2.2.1、 针对某种mapping配置

在springmvc配置文件中:


  
    
        
        
    
  



2.2.2、配置全局拦截器

在springmvc配置文件中:



  
  
    
    
    
    
  
  
    
    
  

2.3、拦截器总结

preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用

postHandler在拦截器链内所有拦截器返回成功时调用
afterCompletion只有preHandle返回true才调用

2.4、防止拦截静态资源

方案二和方案三只支持不在/WEB-INF/下的静态资源

2.4.1、方案一

在拦截器配置中添加
如下:


    
        
        
        
        
    

2.4.2、方案二

在web.xml中对DispatcherServlet添加:


  default
  *.js


  default
  *.jpg

2.4.3、方案三

在springmvc配置文件中添加:



2.4.4、方案四

配置拦截器只拦截*.do或者*.action等,只拦截请求不拦截静态资源。



  
  
    
    
    
  
  
    
    
    
  

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