拦截
所有HandlerMapping
实现都支持处理器拦截,这在您想跨请求应用功能时非常有用。一个HandlerInterceptor
可以实现以下内容:
-
preHandle(..)
— 在实际处理器运行之前的回调,返回布尔值。如果方法返回true
,则执行继续;如果返回false
,则绕过其余的执行链,并且不会调用处理器。 -
postHandle(..)
— 处理器运行后的回调。 -
afterCompletion(..)
— 完成请求后的回调。
对于@ResponseBody 和ResponseEntity 控制器方法,响应是在HandlerAdapter 内写入并提交的,在调用postHandle 之前。这意味着为时已晚,无法更改响应,例如添加额外的标头。您可以实现ResponseBodyAdvice 并将其声明为控制器建议 bean,或直接在RequestMappingHandlerAdapter 上配置它。 |
有关如何配置拦截器的示例,请参见 MVC 配置部分中的拦截器。您也可以通过使用各个HandlerMapping
实现的setter来直接注册它们。
由于可能与带注解的控制器路径匹配不匹配,因此拦截器并不理想地适合用作安全层。通常,我们建议使用 Spring Security,或者使用与 Servlet 过滤器链集成的类似方法,并尽早应用。 |