拦截器

拦截器

1. 什么是拦截器?

基本概念

拦截器(Interceptor)是Spring MVC框架中的一个重要组件,它可以在请求处理的不同阶段进行拦截和处理。

2. 拦截器的作用

主要功能

  1. 性能监控:记录请求处理时间,分析系统性能
  2. 权限验证:检查用户是否有权限访问某个接口
  3. 日志记录:记录请求信息,便于调试和审计
  4. 参数校验:在请求处理前验证参数的合法性
  5. 统一处理:对请求和响应进行统一的预处理和后处理

实际应用场景

  • 登录验证:检查用户是否登录
  • 权限控制:检查用户是否有权限访问资源
  • 性能分析:监控接口响应时间
  • 日志记录:记录用户操作日志
  • 防重复提交:防止用户重复提交表单
  • 跨域处理:处理跨域请求

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("/**");
}

posted on 2026-01-31 09:42  LVjiani  阅读(0)  评论(0)    收藏  举报

导航