推荐答案
在 Spring MVC 中配置拦截器可以通过以下步骤实现:
创建拦截器类:实现
HandlerInterceptor
接口或继承HandlerInterceptorAdapter
类,并重写preHandle
、postHandle
和afterCompletion
方法。注册拦截器:在 Spring MVC 配置类中,通过
WebMvcConfigurer
接口的addInterceptors
方法注册拦截器。配置拦截路径:在注册拦截器时,指定拦截的路径和排除的路径。
示例代码如下:
-- -------------------- ---- ------- ------ ----------------------------------------------------- ------ ---------------------------------------------------------------------- ------ ------------------------------------------------------------------- -------------- ------ ----- --------- ---------- ---------------- - --------- ------ ---- ----------------------------------- --------- - --------------------------- ---------------- ----------------------- -- ------ ----------------------------------- -- ------ - -
-- -------------------- ---- ------- ------ --------------------------------------------------- ------ -------------------------------------- ------ --------------------------------------- ------ ----- ------------- ---------- ------------------ - --------- ------ ------- ---------------------------- -------- ------------------- --------- ------ -------- ------ --------- - -- --------- ------ ----- -- -- ---- ------- ----- ---- - --------- ------ ---- ----------------------------- -------- ------------------- --------- ------ -------- ------------ ------------- ------ --------- - -- ---------------- - --------- ------ ---- ---------------------------------- -------- ------------------- --------- ------ -------- --------- --- ------ --------- - -- ----------- - -
本题详细解读
1. 拦截器的作用
拦截器(Interceptor)是 Spring MVC 提供的一种机制,用于在请求处理的不同阶段执行特定的逻辑。它可以用于权限验证、日志记录、性能监控等场景。
2. 实现 HandlerInterceptor
接口
HandlerInterceptor
接口定义了三个方法:
preHandle
:在请求处理之前执行。返回true
继续执行后续的拦截器和处理器,返回false
中断请求。postHandle
:在请求处理之后,视图渲染之前执行。afterCompletion
:在整个请求完成之后执行,通常用于资源清理。
3. 注册拦截器
在 Spring MVC 配置类中,通过实现 WebMvcConfigurer
接口的 addInterceptors
方法,可以将自定义的拦截器注册到 Spring MVC 框架中。
4. 配置拦截路径
在注册拦截器时,可以通过 addPathPatterns
方法指定需要拦截的路径,通过 excludePathPatterns
方法指定需要排除的路径。路径模式支持 Ant 风格的通配符。
5. 拦截器的执行顺序
如果有多个拦截器,它们的执行顺序与注册顺序一致。preHandle
方法按照注册顺序执行,postHandle
和 afterCompletion
方法按照注册顺序的逆序执行。
6. 拦截器与过滤器的区别
- 拦截器:基于 Spring MVC 框架,只能拦截 Spring MVC 处理的请求。
- 过滤器:基于 Servlet 规范,可以拦截所有进入应用的请求。
拦截器更适合处理与业务逻辑相关的拦截需求,而过滤器更适合处理与请求和响应相关的通用需求。