定義攔截器須要實現HandlerInterceptor接口,該接口中由三個方法:afterCompletion、postHandle、preHandle。web
public class TestHandlerInterceptor implements HandlerInterceptor { /** * 執行Handler後執行。 * 能夠在該方法進行統一的異常處理、統一的日誌處理 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } /** * 進入Handler方法以後,返回ModelAndView以前執行。 * 應用場景從ModelAndView出發,將公用的模型數據在該方法傳到視圖。 * 也能夠統一指定視圖。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 進入Handler方法以前執行 * 該方法能夠用於身份認證、身份受權。 * 如身份認證未經過,須要此方法攔截再也不向下執行。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return false;//false:攔截。true:放行 } }
攔截器配置:spring
一、SpringMVC的攔截器是針對HandlerMapping進行攔截設置。
若在某個HandlerMapping中配置攔截,通過該HandlerMapping映射成功的Handler最終使用該攔截器。mvc
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="handlerInterceptor1"/> <ref bean="handlerInterceptor2"/> </list> </property> </bean> <bean id="handlerInterceptor1" class="handlerInterceptor1全路徑"/> <bean id="handlerInterceptor2" class="handlerInterceptor2全路徑"/>
二、SpringMVC能夠配置相似於全局的攔截器,SpringMVC框架將配置的相似全局的攔截器注入到每一個HandlerMapping中。app
<!-- 攔截器 --> <mvc:interceptors> <!-- 多個攔截器,順序執行 --> <mvc:interceptor> <!-- /**:表示全部url包含子url路徑 --> <mvc:mapping path="/**"/> <bean class="handlerInterceptor1全路徑"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="handlerInterceptor2全路徑"></bean> </mvc:interceptor> </mvc:interceptors>