拦截

所有 HandlerMapping 实现都支持处理器拦截,这在您希望跨请求应用功能时非常有用。HandlerInterceptor 可以实现以下方法:

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

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

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

对于 @ResponseBodyResponseEntity 控制器方法,响应会在 HandlerAdapter 中写入并提交,此时 postHandle 尚未被调用。这意味着更改响应(例如添加额外的头)为时已晚。您可以实现 ResponseBodyAdvice 并将其声明为 Controller Advice bean,或者直接在 RequestMappingHandlerAdapter 上进行配置。

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

拦截器不适合作为安全层,因为它们与注解的控制器路径匹配可能存在不匹配。通常,我们建议使用 Spring Security,或者采用类似的方法与 Servlet 过滤器链集成,并尽早应用。
© . This site is unofficial and not affiliated with VMware.