对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-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

@ResponseBodyResponseEntitycontroller 方法,则将响应写入 并在HandlerAdapter以前postHandle被称为。这意味着它是 更改响应(例如添加额外的标头)为时已晚。您可以实现ResponseBodyAdvice并将其声明为控制器通知 bean 或配置它 直接在RequestMappingHandlerAdapter.

有关如何作的示例,请参阅有关 MVC 配置部分中的拦截器 配置拦截器。您也可以使用单独的 setter 直接注册它们HandlerMapping实现。spring-doc.cadn.net.cn

拦截器不适合作为安全层,因为 与带注释的控制器路径匹配不匹配。通常,我们建议使用 Spring 安全性,或者与 Servlet 过滤器链集成的类似方法, 并尽早应用。