拦截器
拦截器
1. 什么是拦截器?
基本概念
拦截器(Interceptor)是Spring MVC框架中的一个重要组件,它可以在请求处理的不同阶段进行拦截和处理。
2. 拦截器的作用
主要功能
- 性能监控:记录请求处理时间,分析系统性能
- 权限验证:检查用户是否有权限访问某个接口
- 日志记录:记录请求信息,便于调试和审计
- 参数校验:在请求处理前验证参数的合法性
- 统一处理:对请求和响应进行统一的预处理和后处理
实际应用场景
- 登录验证:检查用户是否登录
- 权限控制:检查用户是否有权限访问资源
- 性能分析:监控接口响应时间
- 日志记录:记录用户操作日志
- 防重复提交:防止用户重复提交表单
- 跨域处理:处理跨域请求
3. 代码实现详解
3.1 拦截器类:TimeIntercept.java
public class TimeIntercept implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器执行了,记录开始时间");
long t1 = new Date().getTime();
request.setAttribute("startTime", t1);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
Long t1 = (Long) request.getAttribute("startTime");
Long t2 = new Date().getTime();
System.out.println(request.getRequestURI() + "耗时:" + (t2 - t1));
}
}
3.2 配置类:WebConfiguration.java
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Autowired
private TimeIntercept timeIntercept;
@Bean
public TimeIntercept timeIntercept() {
return new TimeIntercept();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(timeIntercept).addPathPatterns("/**");
}
}
4. 拦截器的工作原理
4.1 请求处理流程
客户端请求
↓
拦截器 preHandle(前置处理)
↓
控制器处理请求
↓
拦截器 postHandle(后置处理)
↓
返回响应给客户端
5. 拦截器的注解和方法
5.1 @Configuration 注解
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
5.2 @Bean 注解
@Bean
public TimeIntercept timeIntercept() {
return new TimeIntercept();
}
5.3 @Autowired 注解
@Autowired
private TimeIntercept timeIntercept;
5.4 addInterceptors 方法
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(timeIntercept).addPathPatterns("/**");
}
浙公网安备 33010602011771号