在Spring MVC中,WebMvcConfigurer 和 HandlerInterceptor 是两个重要的组件,它们分别承担不同的职责。
WebMvcConfigurer 接口
WebMvcConfigurer 是一个配置接口,允许我们自定义Spring MVC的各种功能:
- 配置拦截器注册
- 添加资源处理器
- 配置视图控制器
- 配置跨域请求等
通常我们会实现这个接口或者继承其适配器类来定制MVC配置。
HandlerInterceptor 拦截器
HandlerInterceptor 是Spring MVC中的拦截器接口,可以在请求处理的不同阶段执行自定义逻辑:
-
preHandle\] 在控制器方法执行前调用
示例代码
java
// 自定义拦截器
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("Pre Handle method is Calling");
// 可以在这里做权限验证、日志记录等操作
return true; // 返回true继续执行,返回false中断执行
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("Post Handle method is Calling");
// 可以在这里对model数据进行修改
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception exception) throws Exception {
System.out.println("Request and Response is completed");
// 可以在这里做资源清理工作
}
}
java
// WebMvcConfigurer配置类
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册自定义拦截器并指定路径模式
registry.addInterceptor(new CustomInterceptor())
.addPathPatterns("/api/**") // 拦截/api开头的所有请求
.excludePathPatterns("/api/public/**"); // 排除/api/public开头的请求
}
// 其他常用配置示例
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.maxAge(3600);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}
两者之间的依赖关系
-
配置与实现的关系:
WebMvcConfigurer负责配置和注册各种MVC组件HandlerInterceptor是具体的业务实现组件
-
生命周期关系:
WebMvcConfigurer在应用启动时被Spring容器加载HandlerInterceptor在每次HTTP请求处理过程中被调用
-
依赖注入:
- 通过
WebMvcConfigurer的 [addInterceptors()] 方法注册HandlerInterceptor - 多个拦截器可以通过
WebMvcConfigurer进行统一管理和配置
- 通过
这种设计体现了Spring框架"配置与实现分离"的设计理念,使得系统更加灵活且易于维护。
以上内容由AI大模型生成,注意识别!