主页 > 人工智能  > 

SpringBoot拦截器(Interceptor)

SpringBoot拦截器(Interceptor)
1.什么是拦截器?

Spring Boot 拦截器(Interceptor)是 Spring MVC 框架提供的一种机制,用于在请求到达 Controller 之前或返回响应给客户端之后插入自定义逻辑。它基于 HandlerInterceptor 接口实现,允许你在请求处理的不同阶段(如预处理、后处理)添加通用功能。

拦截器 vs. 过滤器(Filter)

拦截器:作用于 Spring MVC 层,可以访问 Spring 的上下文(如 Bean),适合处理与业务相关的逻辑(如权限校验、日志记录)。

过滤器:作用于 Servlet 层(更底层),无法直接使用 Spring 的依赖注入,适合处理与协议相关的逻辑(如编码转换、跨域处理)。


2.拦截器的核心方法

拦截器通过实现 HandlerInterceptor 接口定义以下方法:

preHandle

时机:在 Controller 方法执行之前调用。

用途:权限校验、参数预处理、请求日志记录。

返回值:

true:继续执行后续拦截器和 Controller 方法。

false:中断请求,直接返回响应。

postHandle

时机:在 Controller 方法执行之后、视图渲染之前调用。

用途:修改 ModelAndView 数据、记录请求处理时间。

afterCompletion

时机:在请求完全结束后调用(视图渲染完成)。

用途:资源清理、统一异常处理、记录最终响应状态。


3.使用场景

权限验证

在 preHandle 中校验用户登录状态或权限,未登录则重定向到登录页。

@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { if (request.getSession().getAttribute("user") == null) { response.sendRedirect("/login"); return false; // 中断请求 } return true; }

日志记录

记录请求的 URL、参数、耗时等信息。

@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { long startTime = System.currentTimeMillis(); request.setAttribute("startTime", startTime); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { long startTime = (Long) request.getAttribute("startTime"); long duration = System.currentTimeMillis() - startTime; log.info("Request URL: {} - Time: {}ms", request.getRequestURL(), duration); }

性能监控

统计接口耗时,识别慢请求。

参数预处理

对请求参数进行统一校验或格式化(如 Trim 空格)。

跨域处理

添加统一的跨域响应头(也可以通过过滤器实现)

如何使用拦截器?

实现 HandlerInterceptor 接口

注册拦截器到 Spring MVC 通过 WebMvcConfigurer 配置类添加拦截器并指定拦截路径: @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private AuthInterceptor authInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor) .addPathPatterns("/api/**") // 拦截的路径 .excludePathPatterns("/api/login"); // 排除的路径 } }

标签:

SpringBoot拦截器(Interceptor)由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SpringBoot拦截器(Interceptor)