文章目錄
-
- 如何自定義攔截器?
-
- 1. 編寫攔截器類,實作 HandlerInterceptor 接口
- 2. 在 Spring MVC 配置檔案中注冊這個攔截器
- 攔截器的配置
- 多個攔截器的執行順序
如何自定義攔截器?
1. 編寫攔截器類,實作 HandlerInterceptor 接口
該接口有以下3個方法:
- preHandle():該方法在目标方法之前被調用。若傳回值為 true,則繼續調用後續的攔截器和目标方法;若傳回值為 false,則不會再調用後續的攔截器和目标方法。用途:可以考慮做權限、日志、事務等
- postHandle():調用目标方法之後,但在渲染視圖之前。用途:可以對請求域中的屬性或視圖做出修改
- afterCompletion():渲染視圖之後被調用。用途:釋放資源
public class FirstInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("[FirstInterceptor] preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("[FirstInterceptor] postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("[FirstInterceptor] afterCompletion");
}
}
2. 在 Spring MVC 配置檔案中注冊這個攔截器
<mvc:interceptors>
<bean class="com.atguigu.springmvc.interceptors.FirstInterceptor"/>
</mvc:interceptors>
攔截器的配置
mvc:interceptors 節點下有一個 mvc:interceptor 節點,不僅能注冊一個攔截器,還可以對攔截器進行一些配置
- mvc:mapping:配置攔截器生效的路徑
- mvc:exclude-mapping:配置攔截器不生效的路徑
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/emps"/>
<bean class="com.atguigu.springmvc.interceptors.SecondInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
多個攔截器的執行順序
- 配置順序:
<mvc:interceptors>
<bean class="com.atguigu.springmvc.interceptors.FirstInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/emps"/>
<bean class="com.atguigu.springmvc.interceptors.SecondInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
- 執行順序:
Spring MVC(11)——攔截器