学习记录使用~
拦截器
1、拦截器概念(Interceptor)
是一种动态拦截方法调用的机制,在SpringMVC中动态拦截器方法的执行。
作用:
- 在指定的方法调用前后执行预先设定的代码。
- 阻止原始方法的执行。
2、拦截器与过滤器区别
- 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术。
- 拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强。
3、拦截器代码
@Component
public class ProjectInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String contentType=request.getHeader("Content-Type");
HandlerMethod hm=(HandlerMethod) handler;
System.out.println("preHandle...."+contentType);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle....");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion....");
}
}
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Autowired
private ProjectInterceptor projectInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//加哪个拦截器,加哪个请求
registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
}
}
4、拦截器参数
拦截器分为前置拦截器和后置拦截器。
request
response
handle
modelAndView
ex
5、拦截过程
6、多拦截器执行顺序
- 当配置多个拦截器时,形成拦截器链。
- 拦截器链的运行顺序参照拦截器添加顺序为准。
- 当拦截器中出现对原始处理器的拦截,后面的拦截器均终止运行。
- 当拦截器运行中断,仅运行配置在前面的拦截器的afterCompletion操作。
配置三个拦截器时的执行顺序。
拦截器链的运行顺序
- proHandle:与配置顺序相同,必定运行。
- postHandle:与配置顺序相反,可能不运行。
- afterCompletion:与配置顺序相反,可能不运行。