跳到主要内容

拦截

ChatGPT-4o-mini 中英对照 Interception

所有 HandlerMapping 实现都支持处理程序拦截,这在您想要在请求之间应用功能时非常有用。一个 HandlerInterceptor 可以实现以下内容:

  • preHandle(..) — 在实际处理程序运行之前的回调,返回一个布尔值。如果该方法返回 true,则继续执行;如果返回 false,则跳过其余的执行链,不调用处理程序。

  • postHandle(..) — 在处理程序运行之后的回调。

  • afterCompletion(..) — 在完整请求完成之后的回调。

备注

对于 @ResponseBodyResponseEntity 控制器方法,响应是在 HandlerAdapter 内部写入并提交的,发生在调用 postHandle 之前。这意味着此时更改响应已经太晚,例如添加额外的头信息。您可以实现 ResponseBodyAdvice 并将其声明为 控制器建议 bean,或者直接在 RequestMappingHandlerAdapter 上进行配置。

请参阅 Interceptors 中关于 MVC 配置的部分,以获取如何配置拦截器的示例。您还可以通过在各个 HandlerMapping 实现上使用设置器直接注册它们。

注意

拦截器并不理想地适合作为安全层,因为可能与注解的控制器路径匹配不一致。一般来说,我们建议使用 Spring Security,或者采用类似的方法与 Servlet 过滤器链集成,并尽早应用。