|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
拦截
所有 HandlerMapping 实现都支持处理器拦截,当你希望在多个请求之间应用通用功能时,这非常有用。HandlerInterceptor 可以实现以下功能:
-
preHandle(..)— 在实际处理器执行之前调用的回调方法,返回一个布尔值。 如果该方法返回true,则继续执行;如果返回false,则跳过后续的执行链,且不会调用处理器。 -
postHandle(..)— 处理器执行后的回调。 -
afterCompletion(..)— 在完整请求完成后的回调。
对于使用 @ResponseBody 和 ResponseEntity 的控制器方法,响应会在调用 HandlerAdapter 之前由 postHandle 写入并提交。这意味着此时再修改响应(例如添加额外的响应头)已经为时过晚。您可以实现 ResponseBodyAdvice 接口,并将其声明为一个
Controller Advice Bean,或者直接在 RequestMappingHandlerAdapter 上进行配置。 |
有关如何配置拦截器的示例,请参见 MVC 配置部分中的拦截器。您也可以通过在各个HandlerMapping实现上使用 setter 方法直接注册它们。
| 由于拦截器可能与带注解的控制器路径匹配不一致,因此不适合作为安全层。通常,我们建议使用 Spring Security,或者采用类似的方法集成到 Servlet 过滤器链中,并尽可能早地应用。 |