实现SpringMvc拦截器,简单使用

149 阅读1分钟

概念

SpringMVC提供的一种动态拦截并增强Handler方法的机制,在指定的handler方法调用前、后执行预先设定好的代码,其实它的原理也就是AOP<

简单使用:

自定义拦截器类:

1.实现拦截器接口HandlerInteceptor,重写3个非强制实现的方法:

  • preHandle
  • postHandle
  • afterCompletion
@Component //该类加载进Spring容器
public class MyInterceptor implements HandlerInterceptor {
    //前置执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         ...
         在此处写入Hanlder方法执行前的逻辑代码 
         ...
        // 此处需要返回true,否则Handler方法以及后面方法都无法执行
        return true;
    }

    //后置执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView){
         ...
         在此处写入Hanlder方法执行后的逻辑代码 
         //注意:如果出现异常,该方法不会执行
         ...
}
    //最终执行
    @Override
    public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler,Exception ex){
         ...
         在此处写入Hanlder方法执行完的逻辑代码 
         //注意:如果出现异常,该方法依然会执行
         ...
    }
}

2.配置加载拦截器 :

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Autowired
    private MyInterceptor myInterceptor;
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        //配置拦截器
        registry.addInterceptor(projectInterceptor)
            .addPathPatterns("/*");   //拦截路径看你自己的需求
    }
}

可以配合 ThreadLocal这个类来实现存入用户id。