-
拦截器(Interceptor):
- 拦截器是Spring MVC框架的一部分,用于动态拦截请求处理流程。
- 它在请求到达控制器(Controller)之前或响应返回给客户端之后,可以对请求和响应进行预处理和后处理。
- 拦截器是AOP(面向切面编程)思想在Spring MVC中的具体实现之一。
-
过滤器(Filter):
- 过滤器是Servlet规范的一部分,属于Java EE标准。
- 它用于拦截和处理HTTP请求和响应,在请求到达Servlet之前或在响应返回客户端之前触发(在请求进入Tomcat容器之后,请求进入Servlet之前执行)。
- 过滤器可以处理的任务包括字符编码设置、跨域处理、安全检查等
拦截器方法:
想要自定义拦截器,需要实现HandlerInterceptor接口。
HandlerInterceptor接口有三个方法,分别是preHandle、postHandle、afterCompletion,关于这三个方法
- preHandle 方法:该方法在执行器方法之前执行。返回值为Boolean类型,如果返回false,表示拦截,不再向下执行;如果返回true,表示放行,程序向下执行(如果后边没有其他Interceptor,就会执行Controller方法)。所以,此方法可对方法进行判断,决定程序是否继续执行,或者进行一些初始化操作及对请求进行预处理。
- postHandle方法:该方法在执行控制器方法调用之后,且在返回ModelAndView之前执行。由于该方法会在DispatcherServlet进行返回视图渲染之前被调用,所以此方法多被用于处理返回的视图,可通过此方法多被用于处理返回的视图,可通过此方法对请求域中的模型和视图做进一步的修改。
- afterCompletion方法:该方法在执行完控制器之后执行。由于是在Controller方法执行完毕之后执行该方法,所以该方法适合进行一些资源清理、记录日志信息等处理操作。
程序首先会执行拦截器类中的preHandle()方法,如果该方法的返回值true,则程序继续向下执行处理器当中的方法,否则不在向下执行;业务处理器(即控制器Controller类)处理完请求后,会执行postHandle()方法,然后会通过DispatcherServlet向前端返回响应;在DispatcherServlet处理完请求后,才会执行afterCompletion()方法。