概念
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。