
| Filter技术 | Interceptor | |
| 技术范畴 | JavaWeb原生技术 | SpringMVC框架技术 |
| 拦截/过滤范畴 | 对所有请求都可以过滤,包括如何Servlet、JSP、其它资源等 | 只有进行了SpringMVC管理的范畴的才拦截,主要拦截对于Controller的请求 |
| 执行时机 | 早于任何Servlet执行 | 晚于DispatcherServlet执行 |
| 方法名 | 参数 | 返回值 | 解释 |
|---|---|---|---|
preHandle | HttpServletRequest requestHttpServletResponse responseObject handler | boolean | 在请求处理之前被调用。返回值表示是否继续执行后续的拦截器和处理器(如果返回 true)或中断请求处理(如果返回 false)。可用于登录验证、权限检查等前置处理。 |
postHandle |
| 无 | 请求处理之后、视图渲染之前被调用。可以在该方法中对请求处理结果进行修改或增加一些公共数据供视图渲染使用。Handler是拦截到的Controller方法处理器,modelAndView是返回的模型视图对象 |
afterCompletion |
| 无 | 在整个请求完成之后被调用,包括视图渲染完毕。可用于进行一些清理工作,如资源回收、记录请求日志等。Handler是拦截到的Controller方法处理器,ex是异常对象 |
- package com.example.Interceptor;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public class Interceptor01 implements HandlerInterceptor {
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- System.out.println("preHandler...");
- return true;
- }
-
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
- System.out.println("postHandler....");
- }
-
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
- System.out.println("afterCompletion....");
- }
- }
配置文件


当客户端发出请求之后,SpringMVC框架通过处理器映射器(HandlerMapping)将请求路径与对应资源匹配起来,原先是通过请求地址匹配到Conreoller控制器,现在再加入Interceptror后,在请求到控制器之前,处理器映射器(HandlerMapping)会根据拦截器的地址来处理对应的请求,(一个请求可能被多个拦截器所拦截,但是一个请求只能被一个控制器所处理),然后RequestMappingHandlerMapping将请求可以访问的资源进行封装为HandlerExecutionChain进行返回。然后再执行拦截器中的方法。