springboot:通过WebMvcConfigurer和HandlerInterceptor配置多个拦截器

1、创建俩个类实现HandlerInterceptor接口
会实现下面三个方法:
preHandle:调用Controller某个方法之前
postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法
afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理

@Slf4j
@Component
public class OneHandlerInterceptor implements HandlerInterceptor {
   

    /**
     * 后处理回调方法,实现处理器(controller)的后处理,但在渲染视图之前
     * 此时我们可以通过modelAndView对模型数据进行处理或对视图进行处理
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
   
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 整个请求处理完毕回调方法,即在视图渲染完毕时回调,
     * 如性能监控中我们可以在此记录结束时间并输出消耗时间,
     * 还可以进行一些资源清理,类似于try-catch-finally中的finally,
     * 但仅调用处理器执行链中
     */
    @Override
    public void afterCompletion(HttpServletRequest request, 
<think>嗯,用户的问题是关于在Spring Boot项目中同时使用HandlerInterceptorWebMvcConfigurer配置方法它们之间的关系。我需要先回顾一下这两个组件的作用它们是如何配合的。 首先,HandlerInterceptorSpring MVC中用来拦截请求的接口,可以在处理请求的前后执行自定义逻辑。用户需要实现这个接口,并重写preHandle、postHandleafterCompletion方法。然后,为了将这个拦截器注册到Spring中,就需要用到WebMvcConfigurer的addInterceptors方法。WebMvcConfigurer是一个配置类接口,允许通过重写其方法来定制Spring MVC的配置,比如添加拦截器、格式化器、视图控制器等。 接下来,用户可能需要一个具体的示例来理解如何将两者结合起来。我应该分步骤说明:首先创建拦截器类,然后创建配置类并注册拦截器。同时,要确保代码示例正确,比如使用@Configuration注解配置类,并实现WebMvcConfigurer接口。 还需要解释它们之间的关系,比如WebMvcConfigurer负责将拦截器添加到拦截器注册表中,而HandlerInterceptor定义了具体的拦截逻辑。用户可能想知道为什么需要同时使用两者,这时候需要说明WebMvcConfigurer配置的入口,而HandlerInterceptor是实际的拦截逻辑实现。 另外,用户可能对拦截器的执行顺序或路径配置有疑问,所以示例中应该包含addPathPatternsexcludePathPatterns的用法,并解释这些方法的作用。比如,如何指定拦截哪些URL,排除哪些URL。 还要注意引用之前的参考资料,比如引用[1][2]提到如何定义拦截器并将其添加到配置器中,这样能增强回答的可信度。同时,引用[3][4]可以进一步说明配置后的效果相关教程,方便用户深入阅读。 在生成相关问题的时候,应该考虑用户可能进一步想了解的内容,比如多个拦截器的顺序、拦截器的应用场景、如何排除静态资源等。这些问题可以帮助用户扩展他们的理解应用能力。 最后,确保回答结构清晰,分步骤说明,代码示例正确,并且用中文自然流畅地表达出来,避免使用Markdown格式,但按照用户的要求,使用$...$$$...$$来排版数学表达式,虽然这个问题可能不涉及数学公式,但需要遵循系统指令中的格式要求。</think>以下是在Spring Boot中同时使用$HandlerInterceptor$$WebMvcConfigurer$的配置步骤及关系解析: ### 一、组件关系说明 1. **$HandlerInterceptor$** 是Spring MVC的拦截器接口,用于在请求处理的不同阶段(如preHandle/postHandle)插入自定义逻辑。需实现三个核心方法: ```java public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(...) { /* 请求前执行 */ } @Override public void postHandle(...) { /* 控制器执行后,视图渲染前 */ } @Override public void afterCompletion(...) { /* 请求完成 */ } } ``` 2. **$WebMvcConfigurer$** 是Spring MVC的配置接口,通过重写其$addInterceptors()$方法将自定义拦截器注入到拦截器链中[^2]。 ### 二、完整配置示例 #### 步骤1:创建拦截器 ```java // 示例:登录验证拦截器 public class LoginCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (request.getSession().getAttribute("user") == null) { response.sendRedirect("/login"); return false; } return true; } } ``` #### 步骤2:注册拦截器 ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginCheckInterceptor()) .addPathPatterns("/admin/**") // 拦截/admin路径 .excludePathPatterns("/static/**"); // 排除静态资源[^4] // 可添加多个拦截器 registry.addInterceptor(new LoggingInterceptor()) .order(1); // 指定执行顺序 } } ``` ### 三、关键配置点 1. **路径匹配规则** - `addPathPatterns()`定义拦截路径,支持Ant风格(如`/api/*`) - `excludePathPatterns()`定义排除路径 2. **执行顺序控制** 通过`order()`方法设置优先级,数值越小优先级越高 3. **拦截器作用范围** 默认拦截所有DispatcherServlet处理的请求,包括动态接口视图请求[^1] ### 四、典型应用场景 1. 权限验证(如示例中的登录检查) 2. 接口耗时监控 3. 跨域请求处理 4. 请求日志记录[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值