HandlerInterceptor
是 Spring 框架提供的一个拦截器接口,用于在请求处理过程中拦截和处理请求。当一个请求到达 Spring MVC 的控制器之前或之后,拦截器可以对请求进行预处理、后处理或者进行拦截操作。
通过实现 HandlerInterceptor
接口,可以自定义拦截器并注册到 Spring MVC 的拦截器链中。拦截器可以用于实现一些通用的功能,如权限验证、日志记录、跨域处理等,以及对请求进行修改、重定向或拦截等操作。
HandlerInterceptor
接口定义了三个方法,分别是:
-
preHandle
:在请求处理之前被调用。可以进行一些预处理操作,如身份验证、参数校验等。如果返回true
,则继续执行后续的拦截器或请求处理器;如果返回false
,则中断请求处理流程。 -
postHandle
:在请求处理之后、视图渲染之前被调用。可以对请求的结果进行后处理,如添加额外的模型数据或修改视图等。 -
afterCompletion
:在整个请求处理完成后被调用,即在视图渲染完成后调用。可以进行一些资源清理操作或日志记录等。
通过实现 HandlerInterceptor
接口,并在配置文件中进行注册,可以将自定义的拦截器应用到 Spring MVC 的请求处理流程中。拦截器按照配置的顺序依次执行,并可以对请求进行拦截、修改或处理,实现特定的业务逻辑或功能需求。
这里拿前置拦截器来说
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在此处编写拦截处理逻辑
// ...
return true; // 或者根据需要返回 false 中断请求处理流程
}
该方法在请求到达控制器之前被调用,允许进行一些预处理操作。它接收三个参数:
-
HttpServletRequest request
:表示当前的 HTTP 请求对象,可以通过该对象获取请求的相关信息,如请求头、请求参数等。 -
HttpServletResponse response
:表示当前的 HTTP 响应对象,可以通过该对象操作响应,如设置响应头、写入响应内容等。 -
Object handler
:表示当前的请求处理器(即控制器方法),是一个处理当前请求的目标对象。
在 preHandle
方法中,你可以编写自定义的拦截处理逻辑。这包括但不限于以下内容:
-
身份验证:检查用户是否已经登录或是否具有相应的权限。如果验证失败,可以中断请求处理流程并返回
false
,或者进行重定向到登录页面或错误页面。 -
参数校验:检查请求参数的合法性和有效性,如检查必填参数、参数格式等。如果参数不符合要求,可以中断请求处理流程并返回
false
,或者返回错误信息给客户端。 -
日志记录:记录请求的相关信息,如请求URL、请求方法、请求参数等,用于后续的跟踪和分析。
-
跨域处理:检查请求的来源域,判断是否允许跨域访问。如果不允许,可以进行相应的处理,如设置响应头或返回错误信息。
在方法的最后,根据业务需求,可以返回 true
继续请求处理流程,或者返回 false
中断请求处理流程。返回 false
会阻止请求继续传递给后续的拦截器或控制器方法。
需要注意的是,拦截器只作用于 Spring MVC 中的请求处理过程,并不影响其他类型的请求处理,如静态资源的处理等。同时,拦截器的执行顺序和配置方式也需要根据具体的需求和场景进行合理的配置和调整。