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