SpringMvc 攔截器介紹 SpringMVC攔截器(Interceptor)實現對每一個請求處理前後進行相關的業務處理,類似與servlet中的Filter。 SpringMVC 中的Interceptor 攔截請求是通過HandlerInterceptor來實現的。 在SpringMVC中定 ...
SpringMvc 攔截器介紹
- SpringMVC攔截器(Interceptor)實現對每一個請求處理前後進行相關的業務處理,類似與servlet中的Filter。
- SpringMVC 中的Interceptor 攔截請求是通過HandlerInterceptor來實現的。
- 在SpringMVC中定義一個Interceptor非常簡單,主要有4種方式:
1)實現Spring的HandlerInterceptor介面;
2)繼承實現了HandlerInterceptor介面的類,比如Spring 已經提供的實現了HandlerInterceptor 介面的抽象類HandlerInterceptorAdapter;
3)實現Spring的WebRequestInterceptor介面;
4)繼承實現了WebRequestInterceptor的類;
定義攔截器
實現HandlerIntercepter介面:
public class MyHandlerIntercepter1 implements HandlerInterceptor{ //Handler執行前調用 //應用場景:登錄認證、身份授權 //返回值為true則是放行,為false是不放行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return false; } //進入Handler開始執行,並且在返回ModelAndView之前調用 //應用場景:對ModelAndView對象操作,可以把公共模型數據傳到前臺,可以統一指定視圖 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } //執行完Handler之後調用 //應用場景:統一異常處理、統一日誌處理 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
配置攔截器
SpringMvc 攔截器是綁定在HandlerMapping中的。即:如果某個HandlerMapping中配置攔截,則該HandlerMapping映射成功的Handler會使用該攔截器。
針對單個HandlerMapping配置
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="interceptor" /> </list> </property> </bean> <bean id="interceptor" class="com.cyb.ssm.interceptor.MyHandlerInterceptor" />
全局攔截器配置(推薦)
SpringMvc的全局攔截器配置,其實是把配置的攔截器註入到每個已初始化的HandlerMapping中了。
<!-- 配置全局mapping的攔截器 --> <mvc:interceptors> <!-- 公共攔截器可以攔截所有請求,而且可以有多個 --> <bean class="com.cyb.ssm.interceptor.MyHandlerInterceptor1" /> <bean class="com.cyb.ssm.interceptor.MyHandlerInterceptor2" /> <!-- 如果有多個攔截器,則按照順序進行配置 --> <mvc:interceptor> <!-- /**表示所有URL和子URL路徑 --> <mvc:mapping path="/test/**" /> <!-- 特定請求的攔截器只能有一個 --> <bean class="com.cyb.ssm.interceptor.MyHandlerInterceptor3" /> </mvc:interceptor> </mvc:interceptors>
多攔截器攔截規則
如果有多個攔截器,那麼配置到springmvc.xml中最上面的攔截器,攔截優先順序最高。