請求響應攔截器:HandlerInterceptorAdapter
一般情況下,對來自瀏覽器的請求的攔截,是利用Filter實現的,這種方式可以實現Bean預處理、後處理。
Spring MVC的攔截器不僅可實現Filter的所有功能,還可以更精確的控制攔截精度。
Spring爲我們提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter這個適配器,繼承此類,可以非常方便的實現自己的攔截器。
public class RequestInterceptor extends HandlerInterceptorAdapter{ //可以進行編碼、安全控制等處理 //該方法會在Controller的方法執行前會被調用,可以使用這個方法來中斷或者繼續執行鏈的處理,當返回true時,處理會繼續,當返回false時,則不會去執行Controller的方法。 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } //在代碼處理後會調用該方法,那麼我們就可以在render view之前往view中添加額外的model對象,或者對view的去處進行修改 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("攔截響應"+modelAndView.getViewName()); super.postHandle(request, response, handler, modelAndView); } //異常處理 @Override public void afterCompletion(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj, Exception exception) throws Exception { // TODO Auto-generated method stub super.afterCompletion(httpservletrequest, httpservletresponse, obj, exception); } }
在xml配置該攔截器
<mvc:interceptors> <mvc:interceptor> <!-- 默認所有的請求都進行攔截 --> <mvc:mapping path="/*" /> <bean class="com.cn.cis.interceptor.RequestInterceptor" /> </mvc:interceptor> </mvc:interceptors>