1.拦截器概念:
拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。
2.拦截器作用:
- 在指定的方法调用前后执行预先设定后的的代码
- 阻止原始方法的执行
3.拦截器与过滤器区别:
- 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
- 拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强
4.入门案例:
1.声明拦截器的bean,并实现HandlerInterceptor接口(注意:扫描加载bean,preHandle返回true执行以下两步,返回false不执行)
public class ProjectInterceptor3 implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle..."); 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..."); } }
2.定义配置类,继承WebMvcConfigurationSupport,,实现addInterceptor方法(注意:扫描加载配置@Configuration),添加拦截器并设定拦截的访问路径,路径可以通过可变参数设置多个
@Configuration public class SpringMvcSupport extends WebMvcConfigurationSupport { @Autowired private ProjectInterceptor projectInterceptor; @Override protected void addInterceptors(InterceptorRegistry registry) { //配置拦截器 registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*"); } }
3.有拦截器执行流程:
5.拦截器参数:
- request:请求对象
- response:响应对象
- handler:被调用的处理器对象,本质上是一个方法对象,对反射技术中的Method对象进行了再包装
- modelAndview:如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整
- ex:如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理