对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

拦截

所有 HandlerMapping 实现均支持处理程序拦截功能,当您需要在跨请求场景中应用特定功能时,该特性尤为实用。HandlerInterceptor 可具体实现以下操作:spring-doc.cadn.net.cn

  • preHandle(..) — 在实际处理器运行前返回布尔值的回调。 若方法返回true,则继续执行;若返回false, 则跳过剩余执行链且不调用处理器。spring-doc.cadn.net.cn

  • postHandle(..)——在处理器运行后的回调。spring-doc.cadn.net.cn

  • afterCompletion(..) — 在请求完全结束后执行回调。spring-doc.cadn.net.cn

对于 @ResponseBodyResponseEntity 控制器方法,响应会在调用 postHandle 之前,在 HandlerAdapter 内部完成写入并提交。这意味着此时修改响应(例如添加额外标头)为时已晚。您可以通过实现 ResponseBodyAdvice 并将其声明为 控制器增强 组件,或直接在 RequestMappingHandlerAdapter 上配置。

请参阅拦截器在MVC配置部分中的示例,了解如何配置拦截器。您还可以通过使用单独的HandlerMapping实现上的setter直接注册它们。spring-doc.cadn.net.cn

拦截器并非理想的安全层解决方案,这主要是因为它们可能与带注解的控制器路径匹配规则存在潜在冲突。通常我们建议采用 Spring Security,或者选择与 Servlet 过滤器链集成的替代方案,并尽早部署。