如何在SpringBoot 2.0.0.RELEASE中用WebMvcConfigurer配置拦截器?
解析Spring Boot 2.0.0.RELEASE中自定义HandlerInterceptor的配置示例
这个示例完美展示了Spring Boot 2.x版本里自定义拦截器的标准配置方式,我来逐部分拆解给你看:
1. 配置类:MyMvcConfig
这是一个标注了@Configuration的配置类,它实现了WebMvcConfigurer接口——这个接口是Spring MVC提供的WebMvc配置器,专门用来定制Spring MVC的各种行为,比如添加拦截器、视图解析器、消息转换器等。
核心方法:addInterceptors
重写addInterceptors方法是注册拦截器的关键,方法参数InterceptorRegistry是拦截器注册表,我们通过它来添加自定义拦截器并配置拦截规则:
@Configuration public class MyMvcConfig implements WebMvcConfigurer{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new TestHandlerInterceptors()).addPathPatterns("/**"); } }
这里的关键调用细节:
addInterceptor(new TestHandlerInterceptors()):把我们自定义的拦截器实例添加到注册表中addPathPatterns("/**"):配置拦截路径,/**表示拦截所有请求路径
2. 自定义拦截器:TestHandlerInterceptors
这个类实现了HandlerInterceptor接口——这是Spring MVC的处理器拦截器接口,它提供了三个核心方法(示例里只展示了preHandle),用来在请求处理的不同阶段插入自定义逻辑:
public class TestHandlerInterceptors implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 这里写请求到达控制器之前的逻辑,比如权限校验、请求日志记录 // 返回true表示放行请求,返回false则直接中断请求流程 return true; } // 另外还有两个可选重写的方法: // postHandle:控制器处理完请求后、视图渲染前执行,可用来修改模型数据 // afterCompletion:视图渲染完成后执行(无论请求是否成功),适合做资源清理 }
额外小技巧
如果需要排除某些路径不被拦截,可以调用excludePathPatterns()方法,比如放行登录接口和静态资源:
registry.addInterceptor(new TestHandlerInterceptors()) .addPathPatterns("/**") .excludePathPatterns("/login", "/css/**", "/js/**");
内容的提问来源于stack exchange,提问作者H.jw




